Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在c中向SQLDataSource添加更新参数#_C#_Gridview_Webforms_Sqldataadapter - Fatal编程技术网

C# 如何在c中向SQLDataSource添加更新参数#

C# 如何在c中向SQLDataSource添加更新参数#,c#,gridview,webforms,sqldataadapter,C#,Gridview,Webforms,Sqldataadapter,关于我的问题, 我试图使用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 =

关于我的问题,

我试图使用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");

但是我不知道正确的语法,有人能告诉我正确的方向吗。您可以添加。尝试类似的方法

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();
}

无法将参数添加到。您可以添加。尝试类似的方法

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();
}

我认为您应该使用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();
  }

我认为您应该使用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();
  }

如果您想使用SQLDataSource,那么我相信语法是正确的

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

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

如果您想使用SQLDataSource,那么我相信语法是正确的

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

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

语法错误,我不能像那样向SQLDataSource添加参数..语法错误,我不能像那样向SQLDataSource添加参数..谢谢,但您说我不能向SQLDataSource添加参数?那么,这是否是其他原因呢?我可能错了?使用
UpdateParameters
属性,您可以指定在SqlDataSource的更新命令中使用哪些参数。很抱歉,我不确定上述代码将如何工作,因为它不执行任何操作。但我还是要试一试,谢谢SqlDataSource接受select语句,有一个属性可以设置update语句。但在这里,行更新并没有必要仅仅为了更新数据库而创建SqlDataSource。Hellfire的答案提供了更好的解决方案。谢谢,但你说我不能向SQLDataSource添加参数?那么,这是否是其他原因呢?我可能错了?使用
UpdateParameters
属性,您可以指定在SqlDataSource的更新命令中使用哪些参数。很抱歉,我不确定上述代码将如何工作,因为它不执行任何操作。但我还是要试一试,谢谢SqlDataSource接受select语句,有一个属性可以设置update语句。但在这里,行更新并没有必要仅仅为了更新数据库而创建SqlDataSource。Hellfire的答案提供了更好的解决方案。+1,您能否解释一下,为什么我应该使用SQLCommand而不是SqlDataSource请QLDASource用于将数据绑定到WebForm上的控件。对于你正在做的事情来说,这是一种过分的杀伤力,尤其是当你试图手动操作的时候。如果您想使用数据绑定路径,那么这是正确的选择。1+不需要在此处创建SqlDataSource。+1,您还可以解释一下,为什么我应该使用SQLCommand而不是SqlDataSource请SqlDataSource用于将数据绑定到WebForm上的控件。对于你正在做的事情来说,这是一种过分的杀伤力,尤其是当你试图手动操作的时候。如果您想走数据绑定路线,那么这是正确的选择。1+无需在此处创建SqlDataSource。