SqlParameter.SourceColumn 属性:http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlparameter.sourcecolumn.aspx
获取或设置源列的名称,该源列映射到 DataSet 并用于加载或返回 Value请帮忙理解一下这个属性,MSDN都看不懂,百度搜索也没有
谢谢!!

解决方案 »

  1.   

    最近总有人问,看不懂msdn这个那个的,是不是都是你呀,你还能看懂什么,看不懂会不会百度,google,自己会不会动手测试,msdn讲的还不够清楚吗,告诉你是映射,而且是针对参数
    使用代码http://blog.sina.com.cn/s/blog_9516744701010gmr.html
      

  2.   

    跟强类型DataSet配合使用比较好比如你数据库的列是 kk,强类型dataset 有一列属性是 KK,
    你要update的时候,假设有语句 kk=@kk
    parameter["@kk"]=MyDataset.KK;这样当你update 的时候,kk跟KK就对应起来了
      

  3.   

    能举个例子吗,SqlParameter我是懂的,就这个SourceColumn属性不懂
      

  4.   

    看一下这个例子。
    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
      

  5.   

    感谢这位朋友的指教,我仔细研究啊,读啊,......还是没懂!
    别的不说,就拿你写的第一个例子:“上面这行代码的意思是:在上面的INSERT语句中,参数"@CustomerID"的数据库类型为Char[5],这个参数的值是传给表中"CustomerID"这个字段的。"CustomerID"这个就是SqlParameter.SourceColumn的值。在这里,SqlParameter.SourceColumn对应的就是接收参数的数据表的列。”我的理解:
    在上面的INSERT语句中,参数"@CustomerID"的值是传给表中"CustomerID"这个字段的,这一点从INSERT语句中可就可以看出的啊,这与SourceColumn属性没什么关系吧,..
    可能是我的理解能力差吧!!能不能拿第一个例子说说,怎么用,怎么传值..可能好懂些!!
      

  6.   

    INSERT INTO Customers (CustomerID, CompanyName) " +
      "VALUES (@CustomerID, @CompanyName)", connection);adapter.InsertCommand.Parameters.Add("@CustomerID",  
      SqlDbType.Char, 5, "CustomerID");
      adapter.InsertCommand.Parameters.Add("@CompanyName",  
      SqlDbType.VarChar, 40, "CompanyName");执行这个怎么理解呢?插入DataTable中CustomerID列的值?哪一行呢?
      

  7.   


    我也是新手,我们一起讨论吧,我觉得讨论着讨论着就明白了。
    经你这么一说,我觉得我之前说的是错的。
    应该是这样的,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。
    我也不懂,欢迎批评指正!在探讨中进步!
      

  8.   

    dataAdpater.UpdateCommand.Parameters.Add(
       "@CategoryName", SqlDbType.NVarChar, 15, "Name");最后那个Name就是DataTable的列,就是说这个Sql语句中的@CategoryName是对应datatable 中 name 那个列的
      

  9.   


    不需要对应行
    SqldataAdapter.Update 操作的时候判断行的三个状态
    新加的,对此行执行InsertCommand
    修改的,对此行执行 UpdateCommand
    删除的,对此行执行DeleteCommand