-3
protected void Button3_Click(object sender, EventArgs e)
{
 cn.Open();

 SqlCommand cmd = new SqlCommand("select top '"+Label4.Text+"' * from qb_vb where marks=1");

 SqlDataReader dr1 = cmd.ExecuteReader();

if (dr1.Read())
 {
  Label8.Text = dr1["quest"].ToString();
  Label9.Text = dr1["ans1"].ToString();
 }
cn.Close();

}

4

2 に答える 2

6

開いた接続にコマンドを関連付ける必要があります。

cn.Open();
SqlCommand cmd = new SqlCommand("select top '"+Label4.Text+"' * from qb_vb where marks=1");
cmd.Connection = cn; // <------ THIS MUST BE ADDED
SqlDataReader dr1 = cmd.ExecuteReader();
if (dr1.Read())
{
    Label8.Text = dr1["quest"].ToString();
    Label9.Text = dr1["ans1"].ToString();
}
cn.Close();
于 2014-07-23T17:19:01.043 に答える
1

Connection Stringを指定する必要があります。

さらに、SQL インジェクションを回避するために、パラメーター化されたクエリを使用したいと考えています。

protected void Button3_Click(object sender, EventArgs e)
{
    string connectionString = "Data Source=(local);" +
                              "Initial Catalog=DATABASE_NAME;" +
                              "Persist Security Info=True;" +
                              "User ID=USER_ID;" +
                              "Password=PASSWORD";

    string cmdText = "SELECT TOP (@Count) * FROM qb_vb WHERE marks=1";

    using (var cnn = new SqlConnection(connectionString ))
    {
        var cmd = new SqlCommand(cmdText, cnn);
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("@Count", Label4.Text);

        cnn.Open();

        SqlDataReader dr1 = cmd.ExecuteReader();

        if (dr1.Read())
        {
            Label8.Text = dr1["quest"].ToString();
            Label9.Text = dr1["ans1"].ToString();
        }
    }
}
于 2014-07-23T17:41:45.393 に答える