【问题标题】:How to update SQL Database如何更新 SQL 数据库
【发布时间】:2016-10-19 09:38:54
【问题描述】:

我正在尝试更新 SQL 数据库的特定信息。我在网上搜索了有用的答案,但没有找到我可以使用的任何东西。当我点击保存按钮时,代码一直有效。这是我的代码。真的很感谢大家的帮助!

  string NyString;
    string itemString;

    private void cmdHämtaLista_Click(object sender, EventArgs e)
    {
        ListBoxOne.Items.Clear();
        SqlConnection cm = new SqlConnection(@"Data Source = (localdb)\MSSQLLocalDB; 
            Initial Catalog = NORTHWND; Integrated Security = True; Connect Timeout = 30; 
            Encrypt = False; TrustServerCertificate = True; ApplicationIntent = ReadWrite; 
            MultiSubnetFailover = False");
        cm.Open();
        SqlCommand cmd = cm.CreateCommand();
        cmd.CommandText = "SELECT TOP(1000)" +
        "[CategoryName]" +
        "FROM[NORTHWND].[dbo].[Categories]";
        //"order by[CategoryName]Desc";    tog bort sortering för kategorierna läggs in 
        //i listan efter bokstavsordning ist för id som de är sorterade på i sql

        SqlDataReader rd = cmd.ExecuteReader();

        while (rd.Read())
        {

            ListBoxOne.Items.Add(rd.GetString(0));

        }

        cm.Close();
        rd.Close();
    }

    private void ListBoxOne_SelectedIndexChanged(object sender, EventArgs e)
    {
        ListBoxTwo.Items.Clear();
        var sitem = (ListBoxOne.SelectedIndex) + 1;

        SqlConnection cm = new SqlConnection(@"Data Source = (localdb)\MSSQLLocalDB; 
            Initial Catalog = NORTHWND; Integrated Security = True; Connect Timeout = 30; 
            Encrypt = False; TrustServerCertificate = True; ApplicationIntent = ReadWrite; 
            MultiSubnetFailover = False");
        cm.Open();
        SqlCommand cmd = cm.CreateCommand();
        cmd.CommandText = "SELECT TOP(1000)" +
        "[ProductName]" +
        "FROM[NORTHWND].[dbo].[Products]" +
        "WHERE [CategoryID]=" + sitem.ToString();
        //"ORDER BY[ProductName]Desc"; tog bort sortering för kategorierna läggs in i listan 
        //efter bokstavsordning ist för id som de är sorterade på i sql

        SqlDataReader rd = cmd.ExecuteReader();

        while (rd.Read())
        {

            ListBoxTwo.Items.Add(rd.GetString(0));

        }

        cm.Close();
        rd.Close();

        MessageBox.Show("Closed.");
    }

    private void ListBoxTwo_SelectedIndexChanged(object sender, EventArgs e)
    {

        itemString = ListBoxTwo.SelectedItem.ToString();
        SqlConnection cm = new SqlConnection(@"Data Source = (localdb)\MSSQLLocalDB; Initial Catalog = NORTHWND; Integrated Security = True; Connect Timeout = 30; Encrypt = False; TrustServerCertificate = True; ApplicationIntent = ReadWrite; MultiSubnetFailover = False");
        cm.Open();
        SqlCommand cmd = cm.CreateCommand();
        cmd.CommandText = "SELECT TOP(1000) [UnitPrice]" +
        "FROM[NORTHWND].[dbo].[Products]" +
        "WHERE [ProductName]=@ProductName";
        cmd.Parameters.AddWithValue("@ProductName", itemString.ToString());
        //"ORDER BY[ProductName]Desc";    tog bort sortering för kategorierna läggs in i listan efter bokstavsordning ist för id som de är sorterade på i sql

        SqlDataReader rd = cmd.ExecuteReader();


        while (rd.Read())
        {

            txtPris.Text = Math.Round(rd.GetDecimal(0), 2).ToString();

        }



        cm.Close();
        rd.Close();
        txtNamn.Text = ListBoxTwo.SelectedItem.ToString();

        txtNamn.Text = itemString;

    }

    private void cmdSave_Click(object sender, EventArgs e)
    {
        NyString = txtNamn.Text;
        itemString = ListBoxTwo.SelectedItem.ToString();

        SqlConnection cm = new SqlConnection(@"Data Source = (localdb)\MSSQLLocalDB; 
            Initial Catalog = NORTHWND; Integrated Security = True; Connect Timeout = 30; 
            Encrypt = False; TrustServerCertificate = True; ApplicationIntent = ReadWrite; 
            MultiSubnetFailover = False");
        cm.Open();
        SqlCommand cmd = cm.CreateCommand();

        cmd.CommandText = "Update Products" +
        "Set [ProductName] =@NewName" +
         cmd.Parameters.AddWithValue("@NewName", NyString.ToString()) +
        //"FROM[NORTHWND].[dbo].[Products]" +
        "WHERE [ProductName]=@ProductName" +
        cmd.Parameters.AddWithValue("@ProductName", itemString.ToString());



        cmd.ExecuteNonQuery();

        cm.Close();



    }
}

【问题讨论】:

  • 你混淆了ParametersCommandText
  • 您是否必须将这些cmd.Parameters.AddWithValue("@NewName", NyString.ToString()) 连接到您的更新字符串中?构建字符串后不应该直接传递它们吗?
  • 请发布异常。并告诉我们您使用的是 Oracle、MySql 等数据库。
  • 包括已经解决的问题,我建议您在打开与数据库的连接时使用using,如下所示:stackoverflow.com/questions/40117636/…

标签: c# sql winforms


【解决方案1】:

你在这里做了什么:将参数连接到命令文本?错误的做法

cmd.CommandText = "Update Products" +
"Set [ProductName] =@NewName" +
cmd.Parameters.AddWithValue("@NewName", NyString.ToString()) +
//"FROM[NORTHWND].[dbo].[Products]" +
"WHERE [ProductName]=@ProductName" +
cmd.Parameters.AddWithValue("@ProductName", itemString.ToString());

尝试用下面的代码替换上面的代码

cmd.CommandText = "Update Products Set [ProductName] =@NewName WHERE [ProductName]=@ProductName";
cmd.Parameters.AddWithValue("@NewName", NyString.ToString())
cmd.Parameters.AddWithValue("@ProductName", itemString.ToString());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 2023-04-03
    相关资源
    最近更新 更多