鉴于以下内容:
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);
如果有人可以解释解决方案之间的差异,那将非常感激。
答案 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<>
。