SqlParameter.SourceColumn 属性:http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlparameter.sourcecolumn.aspx
获取或设置源列的名称,该源列映射到 DataSet 并用于加载或返回 Value请帮忙理解一下这个属性,MSDN都看不懂,百度搜索也没有
谢谢!!
获取或设置源列的名称,该源列映射到 DataSet 并用于加载或返回 Value请帮忙理解一下这个属性,MSDN都看不懂,百度搜索也没有
谢谢!!
使用代码http://blog.sina.com.cn/s/blog_9516744701010gmr.html
你要update的时候,假设有语句 kk=@kk
parameter["@kk"]=MyDataset.KK;这样当你update 的时候,kk跟KK就对应起来了
public static SqlDataAdapter CreateSqlDataAdapter(SqlConnection connection)
{
SqlDataAdapter adapter = new SqlDataAdapter(); // Create the commands.
adapter.InsertCommand = new SqlCommand(
"INSERT INTO Customers (CustomerID, CompanyName) " +
"VALUES (@CustomerID, @CompanyName)", connection); // Create the parameters.
adapter.InsertCommand.Parameters.Add("@CustomerID",
SqlDbType.Char, 5, "CustomerID");
adapter.InsertCommand.Parameters.Add("@CompanyName",
SqlDbType.VarChar, 40, "CompanyName"); return adapter;
}
其中,adapter.InsertCommand.Parameters.Add("@CustomerID",
SqlDbType.Char, 5, "CustomerID");
上面这行代码的意思是:在上面的INSERT语句中,参数"@CustomerID"的数据库类型为Char[5],这个参数的值是传给表中"CustomerID"这个字段的。"CustomerID"这个就是SqlParameter.SourceColumn的值。在这里,SqlParameter.SourceColumn对应的就是接收参数的数据表的列。再看下面这个例子
private static void AdapterUpdate(string connectionString)
{
using (SqlConnection connection =
new SqlConnection(connectionString))
{
SqlDataAdapter dataAdpater = new SqlDataAdapter(
"SELECT CategoryID, CategoryName FROM Categories",
connection);//定义UpdateCommand的语句,在这个语句中,包含了两个参数@CategoryName和@CategoryID,第一个是INPUT参数、第二个既是INPUT参数,又是OUTPUT参数//
dataAdpater.UpdateCommand = new SqlCommand(
"UPDATE Categories SET CategoryName = @CategoryName " +
"WHERE CategoryID = @CategoryID", connection);//添加一个sqlParameter,将参数"@CategoryName"与列名"CategoryName"对应起来//
dataAdpater.UpdateCommand.Parameters.Add(
"@CategoryName", SqlDbType.NVarChar, 15, "CategoryName");//添加一个sqlParameter,将参数"@CategoryID"与列名"CategoryID"对应起来//
SqlParameter parameter = dataAdpater.UpdateCommand.Parameters.Add(
"@CategoryID", SqlDbType.Int);
parameter.SourceColumn = "CategoryID";
parameter.SourceVersion = DataRowVersion.Original; DataTable categoryTable = new DataTable();
dataAdpater.Fill(categoryTable);//修改DataTable中的值//
DataRow categoryRow = categoryTable.Rows[0];
categoryRow["CategoryName"] = "New Beverages";//用DataTable中修改后的值更新数据库中的值,与上面的结合,就是从DataTable中获取参数@CategoryName=列"CategoryName"的值即"New Beverages";从DataTable中获取参数@CategoryID=更新记录更新前的列"CategoryID"的值,假设为1。然后再在数据库Categories表的列"CategoryID"中查找值为@CategoryID的记录,进行更新。//
dataAdpater.Update(categoryTable); Console.WriteLine("Rows after update.");
foreach (DataRow row in categoryTable.Rows)
{
{
Console.WriteLine("{0}: {1}", row[0], row[1]);
}
}
}
}也就是说,SqlParameter.SourceColumn这个属性就是和参数对应的数据表中的列名。具体是将参数的值传入到这个列中,还是从这个列中检索查找与这个参数值相同的记录。需要看具体的sql语句和参数的INPUT、OUTPUT等传输类型。反正就是参数和具体列的一个对应关系。
说了这么多,也不知道你明没明白。
上面两个例子是从msdn上摘的,你可以参考一下。
http://msdn.microsoft.com/zh-cn/library/bbw6zyha.aspx
http://msdn.microsoft.com/zh-cn/library/33y2221y.aspx
别的不说,就拿你写的第一个例子:“上面这行代码的意思是:在上面的INSERT语句中,参数"@CustomerID"的数据库类型为Char[5],这个参数的值是传给表中"CustomerID"这个字段的。"CustomerID"这个就是SqlParameter.SourceColumn的值。在这里,SqlParameter.SourceColumn对应的就是接收参数的数据表的列。”我的理解:
在上面的INSERT语句中,参数"@CustomerID"的值是传给表中"CustomerID"这个字段的,这一点从INSERT语句中可就可以看出的啊,这与SourceColumn属性没什么关系吧,..
可能是我的理解能力差吧!!能不能拿第一个例子说说,怎么用,怎么传值..可能好懂些!!
"VALUES (@CustomerID, @CompanyName)", connection);adapter.InsertCommand.Parameters.Add("@CustomerID",
SqlDbType.Char, 5, "CustomerID");
adapter.InsertCommand.Parameters.Add("@CompanyName",
SqlDbType.VarChar, 40, "CompanyName");执行这个怎么理解呢?插入DataTable中CustomerID列的值?哪一行呢?
我也是新手,我们一起讨论吧,我觉得讨论着讨论着就明白了。
经你这么一说,我觉得我之前说的是错的。
应该是这样的,adapter一般都会对应一个内存中的DataSet和DataTable,再对应一个数据库中的表。
在第一个例子里,insert语句中可以看到参数要更新的列,这个和SourceColumn没关系,那SourceColumn指出的应该是参数是从DataSet的DataTable的哪个字段里检索得到的值。也就是说如果上面的例子修改一下:
SqlDataAdapter adapter = new SqlDataAdapter(); // Create the commands.
SqlDataAdapter dataAdpater = new SqlDataAdapter(
"SELECT ID=CategoryID, Name=CategoryName FROM Categories",
connection); DataTable categoryTable = new DataTable();
dataAdpater.Fill(categoryTable);dataAdpater.UpdateCommand = new SqlCommand(
"UPDATE Categories SET CategoryName = @CategoryName " +
"WHERE CategoryID = @CategoryID", connection);dataAdpater.UpdateCommand.Parameters.Add(
"@CategoryName", SqlDbType.NVarChar, 15, "Name");
dataAdpater.Update(categoryTable);
这样的话,红色标的就是SourceColumn。
我也不懂,欢迎批评指正!在探讨中进步!
"@CategoryName", SqlDbType.NVarChar, 15, "Name");最后那个Name就是DataTable的列,就是说这个Sql语句中的@CategoryName是对应datatable 中 name 那个列的
不需要对应行
SqldataAdapter.Update 操作的时候判断行的三个状态
新加的,对此行执行InsertCommand
修改的,对此行执行 UpdateCommand
删除的,对此行执行DeleteCommand