2017-09-03 49 views
0

工作,我试图让使用此代码从本地数据库中的数据:SELECT语句不上C#

SqlConnection conn = new SqlConnection(@"Data Source = .\SQLEXPRESS; Initial Catalog = serin; Integrated Security = True"); 
conn.Open(); 

string query = "SELECT UserPassword FROM UserList WHERE UserName = @UserName"; 

SqlCommand cmd = new SqlCommand(query, conn); 
//SqlParameter param = new SqlParameter("@UserName", SqlDbType.VarChar, txt_UserName.TextLength); 
//param.Value = txt_UserName.Text; 

//cmd.Parameters.Add(param); 
cmd.Parameters.AddWithValue("@UserName", "aliserin"); 

当我尝试以这种方式,它的工作原理。但是当我尝试从文本框中输入时,它会返回NULL。我尝试了评论,但他们也没有工作。我想也许它是关于类型,但它看起来并不那么看。

任何帮助将不胜感激。

我使用Visual Studio 2017年和SQL Server 2017

+0

你应该看看[我们可以停止使用AddWithValue()了吗?](http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using -addwithvalue-already /)并停止使用'.AddWithValue()' - 它可能会导致意想不到的和令人惊讶的结果... –

回答

1

请勿使用参数名称与列的名称相同...我历史上认为这是一个混淆,因为它将两列视为相同并使用列,而不是参数。尝试

string query = "SELECT UserPassword FROM UserList WHERE UserName = @parmUserName"; 
SqlCommand cmd = new SqlCommand(query, conn); 
cmd.Parameters.AddWithValue("@parmUserName", txt_UserName.Text); 
+0

谢谢。它在我更改参数名称时起作用。 –

3

改变这一行

cmd.Parameters.AddWithValue("@UserName", "aliserin"); 

这个

cmd.Parameters.AddWithValue("@UserName", txt_UserName.Text); 

注:Can we stop using AddWithValue() already?感谢@marc_s

+2

你应该看看[我们可以停止使用AddWithValue()了吗?](http:// blogs。 msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/)并停止使用'.AddWithValue()' - 它可能会导致意外的和令人惊讶的结果... –

+0

Nope 。我的第一次尝试是这样,但没有奏效。 –