将查询结果分配给变量并返回变量
Posted
技术标签:
【中文标题】将查询结果分配给变量并返回变量【英文标题】:Assign query result to a variable and return variable 【发布时间】:2022-01-06 14:28:01 【问题描述】:private int getuserid(String username)
SqlConnection con = new SqlConnection(_conString);
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT USER_ID from tblUser where USERNAME ='" +username+"'";
int locid = Convert.ToInt32(cmd.CommandText);
return locid;
大家好,您知道如何在变量中分配 user_id 的值并返回它。我试过了,但我不确定它好不好。
【问题讨论】:
哎呀,这看起来很可怕——容易受到 sql 注入问题的影响。 【参考方案1】:您需要实际打开连接并运行命令。
您还应该采取措施防止 sql 注入并在发生异常时保持连接打开。这段代码解决了所有三个问题:
private int getuserid(String username)
using (var con = new SqlConnection(_conString))
using (var cmd = new SqlCommand("SELECT user_id FROM tblUser WHERE username = @username", con))
// Use actual column type and length from the database
cmd.Parameters.Add("@username", SqlDbType.NVarChar, 30).Value = username;
con.Open();
return (int)cmd.ExecuteScalar();
最后,如果您的WHERE
子句不匹配,您需要定义您想要发生的情况。现在会有一个例外,但问题中的原始代码也是如此,所以据我所知,这就是你真正想要做的。
【讨论】:
【参考方案2】:try
using (var conn = new SqlConnection(SomeConnectionString))
using (var cmd = conn.CreateCommand())
conn.Open();
cmd.CommandText = "SELECT USER_ID from tblUser where USERNAME =@username";
cmd.Parameters.Add("@username", SqlDbType.NVarChar, 30).Value = username;
using (var reader = cmd.ExecuteReader())
if (reader.Read())
int locaid = Convert.ToInt32(reader.GetOrdinal("USER_ID"));
或
int locaid = (int) cmd.ExecuteScalar();
【讨论】:
见 (***.com/questions/5794529/…)以上是关于将查询结果分配给变量并返回变量的主要内容,如果未能解决你的问题,请参考以下文章