如何从C#执行SQL和Params

时间:2014-07-20 05:45:40

标签: sql-server

鉴于以下内容:

var sql = @"xxxxxxx";
SqlCommand cmd = new SqlCommand();
List<SqlParameter> parameterList = new List<SqlParameter>()
{
    new SqlParameter("@Title", SqlDbType.NVarChar) { Value = "Practice " + testNumber.ToString()},
    new SqlParameter("@ExamId", SqlDbType.Int) { Value = (examId == 0 ? DBNull.Value : (object)examId)},
    new SqlParameter("@TopicId", SqlDbType.Int) { Value = (testTopicId == 0 ? DBNull.Value : (object)testTopicId)},
};    
cmd.Parameters.AddRange(parameterList.ToArray());

如何从c#代码中实际执行cmd?我想要了解的是与我的sql和cmd变量的关系以及我应该使用什么函数来调用它。

请注意,过去我一直在使用它:

int result = db.Database.ExecuteSqlCommand(sql, parameters);

如果有人可以解释解决方案之间的差异,那将非常感激。

1 个答案:

答案 0 :(得分:1)

让我知道如果这不能完全回答你的问题,我不完全确定我知道你在问什么,但这是我最好的:

对于非查询,这很容易:

cmd.ExecuteNonQuery();

对于查询,与需要返回行的查询一样,您需要get a SqlDataReader。这并不是太复杂,但我喜欢使用我写的包装器,所以我不会弄乱任何东西,因为它可能会有点混乱。实质上,但是:

using (var reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        // handle the row
    }
}

现在,至于参数,你的代码应该按原样处理,所以我不确定你在那里寻找什么。

设置命令文本可以通过以下两种方式之一完成:构造函数(new SqlCommand("SELECT * FROM [table] WHERE title = @Title")),或事后使用CommandText属性(cmd.CommandText = "SELECT * FROM [table] WHERE title = @Title")。这些参数名称将映射到您添加的参数。

顺便说一句,您可能会发现使用SqlCommand.Parameters.AddWithValue更容易,而不是使用List<>