c# - C# 不会读取 SQL 变量的更新版本
问题描述
已解决 - 错误地查询了错误的数据库
很抱歉浪费您的时间!:(
我正在尝试读取对 SQL 变量执行一系列操作的结果,这是我试图从中获取值的查询:
DECLARE @Count INT = 0
IF EXISTS(SELECT name FROM sys.sysobjects WHERE Name = N'Table1' AND xtype = N'U')
BEGIN
SET @Count = @Count + (SELECT COUNT(*) FROM Table1)
END
IF EXISTS(SELECT name FROM sys.sysobjects WHERE Name = N'Table2' AND xtype = N'U')
BEGIN
SET @Count = @Count + (SELECT COUNT(*) FROM Table2)
END
IF EXISTS(SELECT name FROM sys.sysobjects WHERE Name = N'Table3' AND xtype = N'U')
BEGIN
SET @Count = @Count + (SELECT COUNT(*) FROM Table3)
END
SELECT @Count
基本上它会检查一堆表(可能不存在)中是否有行。
C# 代码
List<string> queries = new List<string>();
foreach (var table in tables)
{
queries.Add(string.Format(@"IF EXISTS(SELECT name FROM sys.sysobjects WHERE Name = N'{0}' AND xtype = N'U')
BEGIN
SET @Count = @Count + (SELECT COUNT(*) FROM {0})
END", table.Name.Trim()));
}
var queryString = string.Format(@"DECLARE @Count INT = 0 {0} SELECT @Count
GO", string.Join(" ", queries));
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
//I also tried these methods using Dapper:
// int count = connection.Query<int>(queryString);
// int count = (int)connection.ExecuteScalar(queryString);
SqlCommand cmd = new SqlCommand(queryString, connection);
using (SqlDataReader dr = cmd.ExecuteReader())
{
DataTable dt = new DataTable();
dt.Load(dr);
//dt has one row where the data is 0, not the sum as i want it
}
connection.Close();
}
问题
问题是,无论我如何尝试在 C# 中加载结果,总是返回原始值(在本例中为 0,但如果我在查询中更改它,更改会反映在结果中)。
我希望返回的值是所有这些查询的总和:
(SELECT COUNT(*) FROM X)
我试过的
- 在线搜索我认为这是一个范围问题,所以我尝试使用和不使用 SqlCommand 参数运行查询,这并没有改变结果,也许我没有搜索正确的单词
- 在 SET 命令之后和末尾添加“GO”
- 尝试不同的方法来解析 ASP.NET 应用程序中的数据,包括使用名为 Dapper 的外部库
不幸的是,将查询放入存储过程中是不可能的,任何人都知道接下来要尝试什么?我已经坚持了一段时间了......
SQL Server 版本是 SQLServer 2014
解决方案
试试这个 C#(可能有轻微的语法错误 - 没有在 VS 中编写/运行它)。如果您仍然从中得到 0,那么您正在查询一个空数据库:
int count = 0;
using (SqlConnection connection = new SqlConnection(connectionString))
{
try{
connection.Open();
foreach (var table in tables)
{
try{
var cmd = "SELECT COUNT(*) FROM " + table;
using(var sc as new SqlCommand(cmd, connection)){
count += (int)sc.ExecuteScalar();
}
}
catch {}
}
}finally{
connection.Close();
}
}
推荐阅读
- bash - 为什么是美元?创建一个文件?
- svelte - 如何从 Svelte 中已有样式的组件中传递类?
- python - 如何使 sns.FacetGrid 中的所有子图都适合?
- python - 数组到图像的转换
- c# - 无法在 VIsual Studio 中添加对其他 C# 项目的引用
- python - 找到最大的降序
- php - 使用 MUX 上传直接视频
- visual-studio-code - VS Code 默认禁用在部分中查找
- java - Firebase - query.get() vs addListenerForSingleValueEvent 用于单个数据读取
- c++ - 如何在 C++ 中保存 3d 矢量