string que = "SELECT Name FROM StudentInfo where StudentNo=textBox1.Text ";
每次我运行它总是说
"多部分标识符" textBox1.Text"不能被约束"。
我该如何解决这个问题?
答案 0 :(得分:6)
您需要使查询包含文本框中的值。 SQL Server对您的文本框没有任何了解 - 您只是提供了文本DemoBootstrapper
,就好像它引用了SQL Server所知道的内容一样。但是,您不应该在 SQL本身中包含文本框中的值...
相反,您应该参数化SQL,并将文本框中的参数设置为在执行查询时与一起发送的值:
textBox1.Text
这假设您的数据库中// Assuming an open connection...
int studentNo = int.Parse(textBox1.Text);
string sql = "SELECT Name FROM StudentInfo where StudentNo=@student_no";
using (var command = new SqlCommand(conn, sql))
{
command.Parameters.Add("@student_no", SqlDbType.Int).Value = studentNo;
// Execute the command as normal
}
的类型当然是StudentNo
- 相应地进行调整(以及您对Int
的处理方式 - 我正在解析它作为textBox1.Text
)。
您应始终参数化SQL而不是尝试在SQL本身中包含该值,原因有三个:
答案 1 :(得分:2)
您应该参数化查询:
string que = "SELECT Name FROM StudentInfo WHERE StudentNo = @StudentNo"
using (SqlConnection connection = new SqlConnection(WebConfigurationManager.ConnectionStrings["connection"].ConnectionString))
{
using (SqlCommand command = new SqlCommand(sql, connection))
{
command.Parameters.Add("@StudentNo", SqlDbType.VarChar, 50).Value = textBox1.Text;
//If StudentNo is Int
//command.Parameters.Add("@StudentNo", SqlDbType.Int).Value = (int) textBox1.Text;
connection.Open();
string veri = Convert.ToString(command.ExecuteScalar());
return veri;
}
}
答案 2 :(得分:1)
使用此:
string strQuery = "SELECT Name FROM StudentInfo where StudentNo= @studentno";
SqlCommand cmd = new SqlCommand(strQuery);
cmd.Parameters.AddWithValue("@studentno", textBox1.Text.Trim());
答案 3 :(得分:-1)
我真的不明白你的问题,但查询应该是
string que = "SELECT Name FROM StudentInfo where StudentNo= '" + textBox1.Text + "';";
如果StudentNo是DB中的Varchar。或者
string que = "SELECT Name FROM StudentInfo where StudentNo=" + textBox1.Text + ";";
你应该去哪里参加像这样的参数化查询
using (SqlCommand command = new SqlCommand(
"SELECT Name FROM StudentInfo where StudentNo=@No", connection))
{
command.Parameters.Add(new SqlParameter("No", textBox1.Text));
SqlDataReader reader = command.ExecuteReader();
}