从Select Command SQL Server获取结果

时间:2015-02-10 21:49:31

标签: c# sql-server

我试图从select命令中获取结果:

 string strName = dtTable.Rows[i][myName].ToString();
 string selectBrand = "SELECT [brand] FROM [myTable] WHERE [myName] = '" + strName + "'";

 SqlCommand sqlCmdSelectBrand = new SqlCommand(selectBrand , sqlConn);
 sqlCmdSelectBrand .Connection.Open();
 sqlCmdSelectBrand .ExecuteNonQuery();                         

 string newBrand = Convert.ToString(sqlCmdSelectBrand .ExecuteScalar());                          
 sqlCmdSelectBrand .Connection.Close(); 

选择有效,我已经在SQL Studio中执行了它,但它没有在倒数第二行分配给我的变量。调试时没有任何内容被分配给该变量......

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

从SELECT查询返回的读取数据的方法是(在此特定上下文中)有点错误。通常,您调用SqlCommand实例的ExecuteReader来获取数据。

string strName = dtTable.Rows[i][myName].ToString();
string selectBrand = "SELECT [brand] FROM [myTable] WHERE [myName] = @name";

using(SqlCommand sqlCmdSelectBrand = new SqlCommand(selectBrand , sqlConn))
{
    sqlCmdSelectBrand.Parameters.Add(
             new SqlParameter("@name", SqlDbType.NVarChar)).Value = strName;
    sqlCmdSelectBrand .Connection.Open();
    using(SqlDataReader reader = sqlCmdSelectBrand.ExecuteReader())
    {
        if(reader.HasRows)
        {
           reader.Read();
           string newBrand = reader.GetString(reader.GetOrdinal("Brand"));
           ..... work with the string newBrand....
        }
        else
            // Message for data not found...

        sqlCmdSelectBrand .Connection.Close();
    }
}

在您的上下文中,不需要调用ExecuteNonQuery,因为它不会从SELECT查询返回任何内容。如果您至少有一条记录符合WHERE条件

,则对ExecuteScalar的调用应该有效

另请注意,在构建sql命令文本时,应始终使用参数化查询。此外,如果您认为可以完全控制输入,连接字符串是Sql Injection

的大门。