如何通过在c#中选择combobox项来从sql数据库中获取值

时间:2013-01-08 08:21:01

标签: c# sql-server database sql-server-2008 types

我正在尝试这种编码,这个编码中的错误是什么:

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在等于中是不兼容的   运算符“。

3 个答案:

答案 0 :(得分:2)

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

试试这个;

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在等于中是不兼容的   操作

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

  • 将您的ACC_NAME列类型更改为数据库中的nvarchar。不推荐使用Text数据类型。
  • LIKE子句中使用=运算符代替WHERE。您无法与text运算符进行=比较。尝试;
  

ACC_NAME喜欢@ACC_NAME;

答案 1 :(得分:0)

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

comboBox2.SelectedItem.ToString()

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

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

答案 2 :(得分: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