如何将选择结果分配给变量c#

时间:2014-06-08 20:16:37

标签: c# mysql visual-studio-2013

我正在为数据库(学校项目)制作GUI并且我有以下问题 - 当我尝试将结果从select语句分配给变量时我有奇怪的错误:

类型' System.Data.SqlClient.SqlException'未处理的异常发生在System.Data.dll

其他信息:')'附近的语法不正确。

这是我的代码:

                    string sql2 = "SELECT * FROM Car WHERE Make = '@CarID' AND Model = '@CarID2');";
                    SqlCommand cmd3 = new SqlCommand(sql2, sqlconn);
                    cmd3.Parameters.AddWithValue("@CarID", model_cbo);
                    cmd3.Parameters.AddWithValue("@CarID2", make_cbo);
                    string CarID = cmd3.ExecuteScalar().ToString();

我已经找了很长时间的解决方案,但是找不到任何东西,所以请帮忙

这是我与DB连接的代码:

    public CarSpec()
    {
        InitializeComponent();
        connectDB();
        this.conn = new OleDbConnection("PROVIDER=SQLOLEDB;Data Source=HENIU;Initial Catalog=ServiceStation; Integrated Security=SSPI;");
        conn.Open();
    }
    public void connectDB()
    {
        sqlconn = new SqlConnection(@"Data Source=HENIU; Initial Catalog=ServiceStation; Integrated Security=TRUE;");
        sqlconn.Open();
        da = new SqlDataAdapter();
    }

1 个答案:

答案 0 :(得分:1)

您的代码中存在三个问题:

  • WHERE子句
  • 末尾不需要使用括号
  • 参数应该不含单引号。 (否则将被视为字符串文字)
  • ExecuteScalar只返回第一行的第一列。 你无法确定这是否是carID。

改为使用

string sql2 = "SELECT * FROM Car WHERE Make = @CarID AND Model = @CarID2";
SqlCommand cmd3 = new SqlCommand(sql2, sqlconn);
cmd3.Parameters.AddWithValue("@CarID", model_cbo);
cmd3.Parameters.AddWithValue("@CarID2", make_cbo);
SqlDataReader reader = cmd3.ExecuteReader()
if(reader.Read())
{
    int carID = Convert.ToInt32(reader["CarID"]);
}

这里我假设carID是一个数字而不是一个字符串(应该是这样)。但是,如果它是一个字符串,那么您可以将该行更改为

 string carID = reader["CarID"].ToString();