0

我正在尝试这种编码,这种编码有什么错误:

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection("Data Source =TWPL-PC\\SQLEXPRESS;Initial Catalog=TWPLSOFTWARE;Integrated security = True");
            con.Open();
            SqlCommand cmd = new SqlCommand("select ACC_ID ,ACC_TYPE ,ACC_ADD,ACC_CITY ,ACC_STATE ,ACC_COUNTRY ,ACC_TIN_N0 ,ACC_ECC_NO,ACC_RANGE,ACC_DIVISION ,ACC_COMMISS ,ACC_GST_NO ,ACC_CONTACT_PERSON ,ACC_PHONE_NO ,ACC_MOBILE_NO ,ACC_EMAIL ,ACC_PRICE_CODE ,ACC_APPROVAL_STATUS,ACC_PAN_NO from ACCOUNT where ACC_NAME='" + comboBox2.SelectedItem.ToString() + "'", con);
            cmd.Parameters.Add(new SqlParameter("@ACC_NAME", comboBox2.SelectedItem.ToString()));
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                textBox17.Text = dr.GetString(0).ToString();
                comboBox1.SelectedItem = dr.GetString(1).ToString();
                richTextBox1.Text = dr.GetString(2).ToString();
                textBox2.Text = dr.GetString(3).ToString();
                textBox3.Text = dr.GetString(4).ToString();
                textBox4.Text = dr.GetString(5).ToString();
                textBox9.Text = dr.GetString(6).ToString();
                textBox11.Text = dr.GetString(7).ToString();
                textBox13.Text = dr.GetString(8).ToString();
                textBox14.Text = dr.GetString(9).ToString();
                textBox16.Text = dr.GetString(10).ToString();
                textBox12.Text = dr.GetString(11).ToString();
                textBox5.Text = dr.GetString(12).ToString();
                textBox6.Text = dr.GetString(13).ToString();
                textBox8.Text = dr.GetString(14).ToString();
                textBox7.Text = dr.GetString(15).ToString();
                textBox15.Text = dr.GetString(16).ToString();
                //checkBox1.Checked=dr.GetString().ToString();
                textBox10.Text = dr.GetString(18).ToString();

            }                     

        }

这是我的问题:

“数据类型 text 和 varchar 在等于运算符中不兼容。”

4

3 回答 3

2

@ACC_NAME首先在查询中分配变量,然后再次尝试添加为参数。SqlCommand.Parameters从 MSDN 签出。

试试这样;

SqlCommand cmd = new SqlCommand("select ACC_ID ,ACC_TYPE ,ACC_ADD,ACC_CITY ,ACC_STATE ,ACC_COUNTRY ,ACC_TIN_N0 ,ACC_ECC_NO,ACC_RANGE,ACC_DIVISION ,ACC_COMMISS ,ACC_GST_NO ,ACC_CONTACT_PERSON ,ACC_PHONE_NO ,ACC_MOBILE_NO ,ACC_EMAIL ,ACC_PRICE_CODE ,ACC_APPROVAL_STATUS,ACC_PAN_NO from ACCOUNT where ACC_NAME=@ACC_NAME;", con);
cmd.Parameters.AddWithValue("@ACC_NAME", comboBox2.SelectedItem.ToString()));

也基于您的错误信息;

数据类型 text 和 varchar 在 equal to 运算符中不兼容。

在您的数据库中,我认为您的ACC_NAME列类型是text. 这就是为什么当您尝试在字符串中分配它时会出现错误的原因。你有两个选择;

  • ACC_NAME将您的列类型更改为nvarchar在您的数据库中。Text数据类型已弃用。
  • 在您的子句中使用LIKE运算符而不是。您无法与运营商进行比较。尝试;=WHEREtext=

其中 ACC_NAME LIKE @ACC_NAME;

于 2013-01-08T08:28:36.993 回答
0

我想这是一个winform项目,错误来自

comboBox2.SelectedItem.ToString()

如果 comboBox2 绑定到数据源,请尝试使用 SelectedValue 或 SelectedText

否则,您也可以使用 Combobox 的 Text 属性

于 2013-01-08T08:28:17.910 回答
0

您的 SQL 查询中没有 @ACC_NAME 参数。修改您的查询,例如

SqlCommand cmd = new SqlCommand("select ACC_ID ,ACC_TYPE ,ACC_ADD,ACC_CITY ,ACC_STATE ,ACC_COUNTRY ,ACC_TIN_N0 ,ACC_ECC_NO,ACC_RANGE,ACC_DIVISION ,ACC_COMMISS ,ACC_GST_NO ,ACC_CONTACT_PERSON ,ACC_PHONE_NO ,ACC_MOBILE_NO ,ACC_EMAIL ,ACC_PRICE_CODE ,ACC_APPROVAL_STATUS,ACC_PAN_NO from ACCOUNT where ACC_NAME=@ACC_NAME;", con);

或删除该cmd.Parameters.Add(new SqlParameter("@ACC_NAME", comboBox2.SelectedItem.ToString()));声明。

编辑 :

似乎这comboBox1.SelectedItem = dr.GetString(1).ToString();是导致问题的原因。我建议使用comboBox2.Text = dr.GetString(1).ToString();或更好地设置使用comboBox2.SelectedIndex

于 2013-01-08T08:29:02.067 回答