将查询结果分配给变量和 return 变量

Assign query result to a variable and return variable

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 和 return 的值吗?我试过了,但我不确定它是否好用。

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();

您需要实际打开连接和 运行 命令。

您还应该采取措施防止 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 子句不匹配时您希望发生的情况。现在会有一个例外,但问题中的原始代码也是如此,据我所知,这就是你真正想要做的。