如何在asp.net中编写select参数化查询

时间:2011-04-07 10:17:29

标签: asp.net visual-studio

下面的代码编写为在asp.net中调用参数化选择查询

public bool checkConflictTime()
{
    bool TimeExists = false;

    DataSet ds = new DataSet();

    SqlConnection sqlconn = new SqlConnection();
    sqlconn.ConnectionString = ConfigurationManager.ConnectionStrings["TestConn"].ConnectionString;
    string sql = @"SELECT * FROM Images WHERE starttime= @starttime AND endtime = @endtime";

    SqlCommand sqlcommand = new SqlCommand(sql,sqlconn);

    //sqlcommand.Connection = sqlconn;

    //string sql = "CheckConflictTimings";


    sqlcommand.CommandType = CommandType.Text;
    sqlcommand.CommandText = sql;

    sqlcommand.Parameters.Add(new SqlParameter("@starttime", ddlStartTime.SelectedItem.Text));
    sqlcommand.Parameters.Add(new SqlParameter("@endtime", ddlEndTime.SelectedItem.Text));

    SqlDataAdapter da = new SqlDataAdapter(sql, sqlconn);
    try
    {
        da.Fill(ds);
        if (ds.Tables[0].Rows.Count > 0)
        {
            TimeExists = true;
        }
    }   
    catch (Exception ex)
    {

    }
    finally
    {
        sqlconn.Close();
        sqlconn.Dispose();  
    }
    return TimeExists;
}

有什么问题吗?它抛出错误:必须声明标量变量“@starttime” 填充数据适配器时。

4 个答案:

答案 0 :(得分:1)

尝试

SqlDataAdapter da = new SqlDataAdapter(sqlcommand);

答案 1 :(得分:0)

尝试

sqlcommand.Parameters.Add(new SqlParameter("starttime", ddlStartTime.SelectedItem.Text));

添加参数时,我认为您不需要@前缀。

答案 2 :(得分:0)

我认为你没有将你的命令作为SelectCommand传递给适配器。

da.SelectCommand = sqlcommand;

答案 3 :(得分:0)

尝试

  sqlcommand.Parameters.AddWithValue("@starttime",ddlStartTime.SelectedItem.Text);

而不是

   sqlcommand.Parameters.Add(new SqlParameter("@starttime", ddlStartTime.SelectedItem.Text));