如何在 C# 中将更新参数添加到 SQLDataSource

Posted

技术标签:

【中文标题】如何在 C# 中将更新参数添加到 SQLDataSource【英文标题】:How to add update parameter to SQLDataSource in c# 【发布时间】:2013-04-30 14:35:06 【问题描述】:

关于我的问题,

How to get boundfield value, or am I totally wrong?

我正在尝试使用 c# 而不是 ASP.NET 向 SQLDataSource 添加更新参数,但出现错误,

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)

    int userID = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values["userID"].ToString());
    string userName = "";
    string city = "";
    string updateStatement = "Update myTable set userName=@userName, city=@city where userID=@userID";

    foreach (DictionaryEntry entry in e.NewValues)
    
        if (entry.Key == "userName")
            userName = entry.Value.ToString();
        if (entry.Key == "city")
            city = entry.Value.ToString();
    

    using (SqlDataSource ds = new SqlDataSource(ConnectionString(), updateStatement))
    
       ds.UpdateParameters.Add("@userName");  
        ds.UpdateParameters.Add("@city");
       ds.UpdateParameters.Add("@UserId");
    

    gvDetails.EditIndex = -1;
    BindData();

如何传递参数值:S

ds.UpdateParameters.Add("@userName");  
        ds.UpdateParameters.Add("@city");
       ds.UpdateParameters.Add("@UserId");

但是我不知道正确的语法,请有人指导我正确的方向

【问题讨论】:

语法错误,我不能像这样向 SQLDataSource 添加参数.. 【参考方案1】:

我认为你应该使用 SqlCommand 而不是 SqlDataSource:

  using (SqlConnection connection = new SqlConnection(ConnectionString())
  using (SqlCommand cmd = new SqlCommand(updateStatement, connection)) 
    connection.Open();
    cmd.Parameters.Add(new SqlParameter("@Name", userName));
    cmd.Parameters.Add(new SqlParameter("@city", city));
    cmd.Parameters.Add(new SqlParameter("@UserId", userID));
    cmd.ExecuteNonQuery();
  

【讨论】:

+1,你能不能解释一下,为什么我应该使用 SQLCommand 而不是 SqlDataSource? SqlDataSource 用于将数据绑定到 WebForm 上的控件。这对于您正在做的事情来说太过分了,尤其是当您尝试手动执行此操作时。如果您想走数据绑定路线,那么这是正确的选择。 1+这里不需要创建SqlDataSource。【参考方案2】:

如果你想使用SQLDataSource,那么我相信语法是。

ds.UpdateParameters.Add("userName", "someDefaultValue");

没有“@”,您可以提供默认值。

【讨论】:

【参考方案3】:

您不能向SqlDataSource 添加参数。您可以改为添加SqlCommand。尝试类似这样的事情;

string updateStatement = "Update myTable set userName=@userName, city=@city where userID=@userID";

using (SqlDataSource ds = new SqlDataSource(ConnectionString(), updateStatement))
       
        SqlCommand cmd = new SqlCommand(updateStatement);
        cmd.Parameters.Add("@userName");  
        cmd.Parameters.Add("@city");
        cmd.Parameters.Add("@UserId");
        cmd.Paramters["@City"].Value = city;
        cmd.Paramters["@userName"].Value = userName;
        cmd.Paramters["@UserId"].Value = userID;

        GridView1.DataSource = ds;
        GridView1.DataBind();

【讨论】:

谢谢,但是你说我不能给 SQLDataSource 添加参数?这是别的什么吗,msdn.microsoft.com/en-us/library/…,我可能错了吗? 使用UpdateParameters 属性,您可以指定在SqlDataSource 的更新命令中使用哪些参数。 对不起,但我不太确定,上面的代码将如何工作,因为它没有执行任何东西。不过我还是试试看,谢谢 SqlDataSource 接受 select 语句,有一个属性可以设置更新语句。但是在这里更新行没有必要创建 SqlDataSource 只是为了更新数据库。地狱火的回答提供了更好的解决方案。

以上是关于如何在 C# 中将更新参数添加到 SQLDataSource的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中将多个参数化变量添加到数据库中

如何在 C# 中将 DLLImport 与结构一起用作参数?

如何在后面的c#代码中将div添加到容器div

如何在 C# 中将“”添加到 string.Format [重复]

如何在 C# 中将用户输入添加到二维数组

如何在 C# 的富文本框中将文本添加到用户光标的位置?