C#操作数据库,DataSet,DataGridView,更新数据库 [一] - ADO.NET入门之中
生活随笔
收集整理的這篇文章主要介紹了
C#操作数据库,DataSet,DataGridView,更新数据库 [一] - ADO.NET入门之中
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name = "myconnstr" connectionString="server=192.168.15.175;database=wentest;user id=sa;password=19831221" providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Configuration;
namespace datagridview
{
public partial class Form1 : Form
{
private SqlConnection sconn;
private static String connstr = ConfigurationManager.ConnectionStrings["myconnstr"].ConnectionString;
//private SqlCommandBuilder scbder = null;
private DataSet ds = null;
SqlDataAdapter sap = null;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//MessageBox.Show(connstr);
sconn.Open();
//MessageBox.Show(sconn.State.ToString());
try
{
sap = new SqlDataAdapter("select top 10 * from adonet", sconn);
SqlCommandBuilder scbder = new SqlCommandBuilder(sap); //這里自動生成的命令,應是在sap這個適配器里,即每改一條或增加一條記錄都動態寫入sql語句.所以局部變量就行了
ds = new DataSet();
//sap.FillSchema(ds,SchemaType.Source, "test");
sap.Fill(ds, "test");
dataGridView1.DataSource = ds.Tables["test"];
}
catch (SqlException ee)
{
MessageBox.Show(ee.ToString());
}
finally
{
if (sconn.State == ConnectionState.Open)
{
//MessageBox.Show(sconn.State.ToString());
//SqlDataAdapter不用sconn.open(),它會自動打開連接,并且不改變sconn的狀態,即當調用adapter之前
//sconn為open狀態,那么調用完成之后他的狀態也是open。
//MessageBox.Show(sconn.State.ToString());
sconn.Close();
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
sconn = new SqlConnection(connstr);
}
private void button2_Click(object sender, EventArgs e)
{
if (ds.HasChanges()) //改動過
{
try
{
sap.Update(ds.Tables["test"]);
}
catch (System.Exception ex)
{
MessageBox.Show(ex.ToString());
return;
}
finally
{
MessageBox.Show("更新成功!");
}
}
}
private void button3_Click(object sender, EventArgs e)
{
if (ds.HasChanges())
{
MessageBox.Show("改動過");
}
}
private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
//在表的前面加行號
SolidBrush b = new SolidBrush(this.dataGridView1.RowHeadersDefaultCellStyle.ForeColor);
e.Graphics.DrawString((e.RowIndex + 1).ToString(System.Globalization.CultureInfo.CurrentUICulture), this.dataGridView1.DefaultCellStyle.Font, b, e.RowBounds.Location.X + 20, e.RowBounds.Location.Y + 4);
}
}
}
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = sconn;
cmd.CommandText = "myfy_one"; //存儲過程名
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param = cmd.CreateParameter();
param.Direction = ParameterDirection.Input; //輸入參數
param.ParameterName = "@size";
param.DbType = DbType.Int32;
param.Value = 50; //分頁大小
SqlParameter param1 = cmd.CreateParameter();
param1.Direction = ParameterDirection.Input;
param1.ParameterName = "@number";
param1.DbType = DbType.Int32;
param1.Value = 2; //當前頁
cmd.Parameters.Add(param);
cmd.Parameters.Add(param1);
try
{
sap = new SqlDataAdapter(cmd);
SqlCommandBuilder scbder = new SqlCommandBuilder(sap);
ds = new DataSet();
sap.Fill(ds, "test");
dataGridView1.DataSource = ds.Tables["test"];
}
catch (SqlException ee)
{
MessageBox.Show(ee.ToString());
}
finally
{
if (sconn.State == ConnectionState.Open)
{
sconn.Close();
}
}
}
if (ds.HasChanges()) //改動過
{
Boolean check = true;
try
{
sap.Update(ds.Tables["test"]);
}
catch (System.Exception ex)
{
MessageBox.Show(ex.ToString());
//return;
check = false;
}
finally
{
if (check)
{
MessageBox.Show("更新成功!");
}
}
}
<configuration>
<connectionStrings>
<add name = "myconnstr" connectionString="server=192.168.15.175;database=wentest;user id=sa;password=19831221" providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>
app.config配置文件
添加using System.Configuration;引用
using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Configuration;
namespace datagridview
{
public partial class Form1 : Form
{
private SqlConnection sconn;
private static String connstr = ConfigurationManager.ConnectionStrings["myconnstr"].ConnectionString;
//private SqlCommandBuilder scbder = null;
private DataSet ds = null;
SqlDataAdapter sap = null;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//MessageBox.Show(connstr);
sconn.Open();
//MessageBox.Show(sconn.State.ToString());
try
{
sap = new SqlDataAdapter("select top 10 * from adonet", sconn);
SqlCommandBuilder scbder = new SqlCommandBuilder(sap); //這里自動生成的命令,應是在sap這個適配器里,即每改一條或增加一條記錄都動態寫入sql語句.所以局部變量就行了
ds = new DataSet();
//sap.FillSchema(ds,SchemaType.Source, "test");
sap.Fill(ds, "test");
dataGridView1.DataSource = ds.Tables["test"];
}
catch (SqlException ee)
{
MessageBox.Show(ee.ToString());
}
finally
{
if (sconn.State == ConnectionState.Open)
{
//MessageBox.Show(sconn.State.ToString());
//SqlDataAdapter不用sconn.open(),它會自動打開連接,并且不改變sconn的狀態,即當調用adapter之前
//sconn為open狀態,那么調用完成之后他的狀態也是open。
//MessageBox.Show(sconn.State.ToString());
sconn.Close();
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
sconn = new SqlConnection(connstr);
}
private void button2_Click(object sender, EventArgs e)
{
if (ds.HasChanges()) //改動過
{
try
{
sap.Update(ds.Tables["test"]);
}
catch (System.Exception ex)
{
MessageBox.Show(ex.ToString());
return;
}
finally
{
MessageBox.Show("更新成功!");
}
}
}
private void button3_Click(object sender, EventArgs e)
{
if (ds.HasChanges())
{
MessageBox.Show("改動過");
}
}
private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
//在表的前面加行號
SolidBrush b = new SolidBrush(this.dataGridView1.RowHeadersDefaultCellStyle.ForeColor);
e.Graphics.DrawString((e.RowIndex + 1).ToString(System.Globalization.CultureInfo.CurrentUICulture), this.dataGridView1.DefaultCellStyle.Font, b, e.RowBounds.Location.X + 20, e.RowBounds.Location.Y + 4);
}
}
}
sqldataadapter執行存儲過程,可以看到它的構造函數里有一個 sqldataadapter(sqlcommand) 的方法。那么執行服務器里的存儲就是填充cmd的各個參數就OK
private void button4_Click(object sender, EventArgs e){
SqlCommand cmd = new SqlCommand();
cmd.Connection = sconn;
cmd.CommandText = "myfy_one"; //存儲過程名
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param = cmd.CreateParameter();
param.Direction = ParameterDirection.Input; //輸入參數
param.ParameterName = "@size";
param.DbType = DbType.Int32;
param.Value = 50; //分頁大小
SqlParameter param1 = cmd.CreateParameter();
param1.Direction = ParameterDirection.Input;
param1.ParameterName = "@number";
param1.DbType = DbType.Int32;
param1.Value = 2; //當前頁
cmd.Parameters.Add(param);
cmd.Parameters.Add(param1);
try
{
sap = new SqlDataAdapter(cmd);
SqlCommandBuilder scbder = new SqlCommandBuilder(sap);
ds = new DataSet();
sap.Fill(ds, "test");
dataGridView1.DataSource = ds.Tables["test"];
}
catch (SqlException ee)
{
MessageBox.Show(ee.ToString());
}
finally
{
if (sconn.State == ConnectionState.Open)
{
sconn.Close();
}
}
}
?
?
更新按鈕更改為if (ds.HasChanges()) //改動過
{
Boolean check = true;
try
{
sap.Update(ds.Tables["test"]);
}
catch (System.Exception ex)
{
MessageBox.Show(ex.ToString());
//return;
check = false;
}
finally
{
if (check)
{
MessageBox.Show("更新成功!");
}
}
}
?
?
?
簡單的過程:
1 先生成一個Sqlconnection連接
2 創建一個SqldataAdapter對象,并與commandtxt,conn關聯
3 new dataset
4?用adapter的fill填充數據到dataset對象,fill(ds,"表名"),dataset是由多個對象組成,其中一個datatables,填的數據就是填到這里
5 關聯到datagridview,即datasource = dataset.tables["表名"]
6 若是要點一個按鈕更新所有更改,那么要sqlcommandbuilder這個對象。
注意: 這里說的是單個表查詢的數據,并且表要設置主鍵。 若是多個表,即要生成多個adapter.fill到本地的dataset表集合中(這個沒試過)。
7
轉載于:https://www.cnblogs.com/onepc/archive/2011/11/01/2230962.html
總結
以上是生活随笔為你收集整理的C#操作数据库,DataSet,DataGridView,更新数据库 [一] - ADO.NET入门之中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shm_overview(7)
- 下一篇: C# WinForm 软件注册的实现