【问题标题】:Wrong Format of the initialization string in ADO.NETADO.NET 中初始化字符串的格式错误
【发布时间】:2017-05-10 06:48:33
【问题描述】:

我只是有一个简单的方法显示如下:

private void Button_Click_1(object sender, RoutedEventArgs e)
    {

        string sqlcmdString = string.Format("UPDATE Bills SET Name = '@name', Time = '@time', Product = '@pro', Price = @money WHERE Name = '@value';");

        using (SqlConnection con = new SqlConnection(sqlcmdString))
        using (SqlCommand cmd = new SqlCommand("dbo.Bills", con))
        {
            // tell ADO.NET it's a stored procedure (not inline SQL statements)
            cmd.CommandType = CommandType.StoredProcedure;

            // define parameters
            cmd.Parameters.Add("@name", SqlDbType.NVarChar, 100).Value = tb_TenKH.Text;
            cmd.Parameters.Add("@time", SqlDbType.DateTime).Value = cb_Thoigian.Text;
            cmd.Parameters.Add("@pro", SqlDbType.NVarChar, 100).Value = tb_SanPham.Text;
            cmd.Parameters.Add("@money", SqlDbType.Money).Value = tb_ThanhTien.Text;
            cmd.Parameters.Add("@value", SqlDbType.NVarChar, 100).Value = cellvalue;

            // open connection, execute stored procedure, close connection again
            con.Open();
            if (cmd.ExecuteNonQuery() > 0)
            {
                //dosomething
            }
            else
            {
                MessageBox.Show("Failed!!!");
            }
            con.Close();
        }


    }

无法运行此行。当我调试它时,它显示错误:

System.ArgumentException: '初始化字符串的格式不 不符合从索引 0 开始的规范。'

我知道我的sqlcmdString 出了点问题,可能与语法有关,但我无法确定。请帮帮我。

【问题讨论】:

  • SqlConnection 需要连接字符串作为参数,而不是更新查询。更新属于SqlCommand。
  • 你在哪里传递 SP 名称?? “dbo.Bills”看起来不像 SP 名称。请参阅此 SO 帖子:stackoverflow.com/questions/12834249/…
  • @diiN__________ 那么我能做些什么来处理它?我被困住了......
  • @NareshRavlani 我没有通过任何 SP,“dbo.Bills”是我想在 DB 中更新的表的名称。是错误的语法吗?请帮帮我。
  • @PhanThếKhương :正如您提到的作为存储过程的 CommandType,我相信您想在这里使用 SP。使用 SP 时,不必从 C# 代码传递查询和表名。相反,您必须传递 SP 的名称和 SP 的参数。在我之前的评论中,我分享了一个链接,请参考它,如果您需要更多帮助,请告诉我。

标签: wpf parameters ado.net


【解决方案1】:

我的语法错误:我应该像下面这样使用:

string sqlcmdString = string.Format("UPDATE Bills SET Name = '@name', Time = '@time', Product = '@pro', Price = @money WHERE Name = '@value';");

        using (SqlConnection con = new SqlConnection(connString))
        {
            con.Open();
            using (SqlCommand cmd = new SqlCommand(sqlcmdString, con))
            {
                cmd.CommandType = CommandType.Text;
                // define parameters
                cmd.Parameters.Add("@name", SqlDbType.NVarChar, 100).Value = tb_TenKH.Text;
                cmd.Parameters.Add("@time", SqlDbType.DateTime).Value = cb_Thoigian.Text;
                cmd.Parameters.Add("@pro", SqlDbType.NVarChar, 100).Value = tb_SanPham.Text;
                cmd.Parameters.Add("@money", SqlDbType.Money).Value = tb_ThanhTien.Text;
                cmd.Parameters.Add("@value", SqlDbType.NVarChar, 100).Value = cellvalue;

                if (cmd.ExecuteNonQuery() > 0)
                {
                    MessageBox.Show("Thành Công!!!");
                    if (passrow != null)
                    {
                        string[] result_back = { tb_TenKH.Text, cb_Thoigian.Text, tb_SanPham.Text, tb_ThanhTien.Text };
                        passrow(result_back);
                        {
                            this.Hide();
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Thất Bại!!!");
                }
                con.Close();
            }
        } 

【讨论】:

  • 为什么还要使用参数?您可以将@name 替换为 tb_TenKH.Text 等等..在 sqlcmdString 本身中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多