2011/6/14
1、SqlParameter(“e”,0)的陷阱
程序会把0默认为枚举类型,那样就不能提供变量的值,所以如果想这样用的话,必须改成new SqlParameter(“e”,(object)0)
2、sqlconnection不能一直在程序中保持连接状态是因为数据库的连接在现实中是非常宝贵的资源,一定要用完就close或者dispose
3、DataSet的更新
private void button6_Click(object sender, EventArgs e)
{
DataSet dataset = new DataSet(); //创建一个新的dataset
string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from T_Person";
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dataset); //向数据集中填充元素
DataTable table = dataset.Tables[0];//取到datatable
DataRow row = table.Rows[0];//取到第一行
row["Name"] = "Jason";//是可以修改的
//table.Rows.RemoveAt(1);//删除第一行
//table.NewRow();//新加行
//SqlCommandBuilder要求表必须要有主键
SqlCommandBuilder builder=new SqlCommandBuilder(adapter); //自动生成一些SQL语句,虽然比较慢,但一般情况下也够用了
//adapter.InsertCommand = conn.CreateCommand();
//adapter.InsertCommand.CommandText="Insert into ........... "
adapter.Update(dataset);//对dataset的修改都是在内存中的,没有对数据库进行修改
}
}
}
通过DadaRow 的RowState可以获得行的状态(删除,添加,新增等)
通过DataSet的GetChanges()结果集得到变化的结果集,降低传递的资源占用
4、可空数据类型
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)