gpt4 book ai didi

c# - sqlCommand 并以编程方式检索和设置存储过程的参数

转载 作者:太空宇宙 更新时间:2023-11-03 11:26:53 26 4
gpt4 key购买 nike

我是 .NET 的新手,但需要深入了解一下。我的任务是扩展现有的单元测试,该单元测试目前仅尝试接收所有存储过程的列(作为测试数据库连接及其模式完整性的一种方式)。目标是检索所有存储过程的参数并尝试使用空值运行它们,测试以验证没有返回记录集。我一直在用头撞墙试图跟上 ADO.NET 的速度,但终究无法弄清楚如何做到这一点。这是我所了解的(有些断章取意)。测试提示没有传入任何参数,但我认为我将现有参数集设置为 null 并简单地将其传回。

 // bind our sql schema gridview
foreach (SqlSchemaItem item in items)
{
// pull a connection
using (var sqlConnection = new SqlConnection(connectionString))
{
// open connection
sqlConnection.Open();

// get schema
try
{
/*
* Part 1 - test that the schema is ok...
*/
var sqlCommand = new SqlCommand(item.ObjectName, sqlConnection);
sqlCommand.CommandType = CommandType.StoredProcedure;
SqlCommandBuilder.DeriveParameters(sqlCommand);
sqlCommand.ExecuteReader(CommandBehavior.SchemaOnly);

// success to console
Console.WriteLine(item.ObjectName + " is ok.");

/*
* Part 2 - test that the stored procedure does not return any data.
*/

// set all the parameters to NULL
foreach (SqlParameter parameter in sqlCommand.Parameters)
{
if (parameter.Direction == ParameterDirection.Input || parameter.Direction == ParameterDirection.InputOutput)
{
parameter.Value = null;
Console.WriteLine("Parameter {0} set to null", parameter.ParameterName, parameter.Value);
}
}

var temp = sqlCommand.ExecuteReader(CommandBehavior.SingleResult);
if (temp.HasRows) {
Console.WriteLine(string.Format("A record was returned in {0} with value {0}", temp.GetName(0), temp.GetString(0)));
}
else {
Console.WriteLine("No result was returned");
}
Console.WriteLine(" ");
}
catch ...
finally ...
etc.

最佳答案

使用 DBNull.Value 而不是 null

关于c# - sqlCommand 并以编程方式检索和设置存储过程的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9041099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com