gpt4 book ai didi

c# - 确定 SQL Server 查询(存储过程)结果类型

转载 作者:行者123 更新时间:2023-11-30 16:51:00 24 4
gpt4 key购买 nike

我计划在 SQL Server 中将我的数据组织为我自己的一个小 orm,在我的代码中为每个数据创建元数据类。

对于我对对象进行硬编码的测试,下一步是使用关于这些对象的 SQL Server 查询生成每个对象的属性。

现在我用 C# 处理代码的存储过程部分,
我想知道如何以某种方式使用 SQL Server 来查询所执行命令的结果类型?

例如,在这里我们甚至通过阅读它的名字就知道它在做什么......

[dbo].[GtallDrLFilesCount]

但另一个可以选择一些其他类型的返回,例如行集字符串等'

使用上面的存储过程将返回一个 int :

if(@AllDrives=1) Begin 
Select
* From [dbo].[HddFolderFiles]
End

但下一个(上方)选择所有内容而不是 RowsCount

我打算访问 SQL Server 并查询它的对象,因为我不打算设置返回参数 (OUT),有没有更优雅的方法来实现它,而不是解析 .sql 存储过程的文件?

就像如果文本包含 SELECT *(这是一个行集)期望它与 DataTable如果文本包含Select COUNT(*)(这是int)准备int类型变量。

我想,如果我没有为我的存储过程分配 out 参数,SQL Server 能以某种方式告诉返回类型,即使它没有 out 参数来简化它吗?

最佳答案

我认为您必须执行 SProc 才能获取它的列,但您可以使用 set fmtonly

在不实际返回数据的情况下执行此操作

即使是返回单个值(例如 - int)的存储过程,当您使用 c# 时也会返回一个表...因此您只需要查看阅读器的 Columns 即可获取所需的数据。

所以:

set fmtonly on
exec [dbo].[MyStoredProc] 0
set fmtonly off

将返回一个您可以在 C# 中检查的记录集

var adoCon = new System.Data.SqlClient.SqlConnection(_sConnectStr);
var adoCmd = new System.Data.SqlClient.SqlCommand("your SQL (above)", adoCon);

var Rows = adoCmd.ExecuteReader();
DataTable dtSchema = Rows.GetSchemaTable();

现在 - 您可以浏览 dtSchema 以获取列。它不是纯 SQL,而是一种 c# + SQL 方法。 [dbo].[GtallDrLFilesCount] 将返回单个列表(int 类型的列)。

显然 - 使用 SQL 命令(不是字符串)。下一个技巧是将 SQL 类型转换为 native c# 类型(对于某些数据类型很容易,而对于其他数据类型则很棘手……看看 ADOCommand 的 ReturnProviderSpecificTypes 选项)。

希望对您有所帮助!

关于c# - 确定 SQL Server 查询(存储过程)结果类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34232638/

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