将查询结果分配给变量并返回变量

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/…)

以上是关于将查询结果分配给变量并返回变量的主要内容,如果未能解决你的问题,请参考以下文章

将@@ rowcount分配给SQL Server存储过程中的变量

将函数的结果分配给 PHP 类中的变量? OOP 怪异

从子查询存储过程分配变量

将 vlookup 值分配给变量

c#将数据库查询结果赋值到变量中

无法将查询结果分配给 python 变量