0

我得到了一个 ComboBox,其中表作为数据源,ID 作为值成员,名称作为显示成员。从 ComboBox 中选择一个名称应使用数据填充 6 个文本框。

例外:

The data type is not valid for the boolean operation. [ Data type (if known) = int,Data type (if known) = nvarchar ]

代码:

void FillComboBox()
{

//Fill Combo Box

    SqlCeDataAdapter da = new SqlCeDataAdapter(" SELECT CustomerID, Name FROM Customers", clsMain.con);
    DataSet ds = new DataSet();
    da.Fill(ds);
    cBox1.DataSource = ds.Tables[0];
    cBox1.ValueMember = "CustomerID";
    cBox1.DisplayMember = "Name";
}

public frmMain()
{
    InitializeComponent();
}

private void frmMain_Load(object sender, EventArgs e)
{
    clsMain.con.ConnectionString = @"Data Source=|DataDirectory|\Database\Sales.sdf";
    clsMain.con.Open();

    FillComboBox();
}

private void btnSave_Click(object sender, EventArgs e)
{

//Save Button

    SqlCeCommand cmd = new SqlCeCommand();
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = " INSERT INTO Customers (Name, Phone1, Phone2, Address, Notes) VALUES (@Name, @Phone1, @Phone2, @Address, @Notes) ";
    cmd.Connection = clsMain.con;

    cmd.Parameters.AddWithValue("@Name", txt2.Text.Trim());
    if (txt3.Text != "")
    {
        cmd.Parameters.AddWithValue("@Phone1", Convert.ToInt32(txt3.Text));
    }
    else
    {
        cmd.Parameters.AddWithValue("@Phone1", Convert.DBNull);
    }
    if (txt4.Text != "")
    {
        cmd.Parameters.AddWithValue("@Phone2", Convert.ToInt32(txt4.Text));
    }
    else
    {
        cmd.Parameters.AddWithValue("@Phone2", Convert.DBNull);
    }
    cmd.Parameters.AddWithValue("@Address", txt5.Text.Trim());
    cmd.Parameters.AddWithValue("@Notes", txt6.Text.Trim());



    cmd.ExecuteNonQuery();
    MessageBox.Show("Data stored.");
}

private void cBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (cBox1.SelectedIndex >= 0)
    {

        String Code = "SELECT * FROM Customers WHERE CustomerID=" + cBox1.SelectedValue.ToString();
        SqlCeDataAdapter da = new SqlCeDataAdapter(Code, clsMain.con);
        DataSet ds = new DataSet();
        da.Fill(ds);


        txt1.Text = ds.Tables[0].Rows[0]["CustomerID"].ToString();
        txt2.Text = ds.Tables[0].Rows[0]["Name"].ToString();
        txt3.Text = ds.Tables[0].Rows[0]["Phone1"].ToString();
        txt4.Text = ds.Tables[0].Rows[0]["Phone2"].ToString();
        txt5.Text = ds.Tables[0].Rows[0]["Address"].ToString();
        txt6.Text = ds.Tables[0].Rows[0]["Notes"].ToString();
    }
}

表详细信息:

在此处输入图像描述

4

2 回答 2

1

跟进我的评论(需要注意的是我从未使用过 SQL CE,但我很确定(99.9%)这是正确的)。

在您的 SQL 查询字符串中,您使用单引号 ( ') 将客户 ID 括起来。您在 SQL 中使用单引号(至少是“正常”SQL)来表示字符(char\varchar 等)和日期值。您传递不带单引号的数值。

您没有指出哪一行给了您异常,但是根据表结构和您正在做的事情(顺便说一下,您在问题中提供了很好的细节),似乎错误消息告诉您“重新尝试将 int 与 varchar 进行比较,这是不允许的(因为它们是不同的数据类型,如错误所示)。

要解决此问题,只需从 WHERE 子句中的值中删除单引号并按如下方式构造查询:

String Code = "SELECT * FROM Customers WHERE CustomerID=" + cBox1.SelectedValue;
于 2013-05-05T04:50:50.093 回答
0

谢谢,它为我工作。我有一些客户的名字comboBox2。将根据所选名称textbox返回CustomerID和 Date of Allocation 值。以下是代码:

   private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            if(comboBox2.SelectedIndex>0)
            {
                con = new SqlCeConnection(s);
                con.Open();
                string code = "select CustomerID,Date_of_Allocation from lockerdetails    
                where CustomerName='" + comboBox2.SelectedValue.ToString() + "'";

                SqlCeDataAdapter da = new SqlCeDataAdapter(code, con);
                SqlCeCommandBuilder cmd = new SqlCeCommandBuilder(da);
                DataSet ds = new DataSet();
                da.Fill(ds);
                textBox1.Text = ds.Tables[0].Rows[0]["CustomerID"].ToString();
                textBox5.Text = ds.Tables[0].Rows[0]["Date_of_Allocation"].ToString();
            }
        }
        catch(SystemException se)
        {
            MessageBox.Show(se.Message);
        }
于 2013-05-20T08:30:36.373 回答