C# 如何从C执行SQL字符串,并将返回的结果存储在DataTable或其他适当的数据结构中?
我有一个字符串,在通过SQL Server Management Studio执行时返回大量记录: 需要将上述每条语句的结果写入不同的CSV文件。我需要一个通用的解决方案,它独立于传递给存储过程的参数,并将执行语句的结果存储在适当的数据结构(可能是DataTable)中?然后我可以解析数据并将其写入不同的CSV文件。 尝试使用SqlDataAdapter并将结果存储在数据表中,但无法使其工作C# 如何从C执行SQL字符串,并将返回的结果存储在DataTable或其他适当的数据结构中?,c#,sql-server,C#,Sql Server,我有一个字符串,在通过SQL Server Management Studio执行时返回大量记录: 需要将上述每条语句的结果写入不同的CSV文件。我需要一个通用的解决方案,它独立于传递给存储过程的参数,并将执行语句的结果存储在适当的数据结构(可能是DataTable)中?然后我可以解析数据并将其写入不同的CSV文件。 尝试使用SqlDataAdapter并将结果存储在数据表中,但无法使其工作 var connectionString = "my connection string";
var connectionString = "my connection string";
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();
SqlCommand cmd = new SqlCommand("EXEC sp_return_records '2019-05-20','ABC';", conn);
cmd.CommandType = CommandType.StoredProcedure;
DataTable t1 = new DataTable();
using (SqlDataAdapter a = new SqlDataAdapter(cmd))
{
a.Fill(t1);
}
不确定这是否是执行字符串的正确方法。我正在获取System.Data.SqlClient.SqlException,执行超时已过期。列出行;
使用var conn=new SQLConnectionString
{
DateTime when=…///2019-05-20-键入**作为日期时间**,而不是字符串
行=conn.Queryreturn\u记录,
new{paramname here=when,AnotherParamName=ABC},//这是参数
commandType:commandType.StoredProcess
.AsList;
}
这里的要点:
DataTable几乎从来都不是首选,除非您正在编写动态报告应用程序或类似于SSMS的东西
在本例中,我使用的是MyKnownType{…}类,它的属性在名称和类型上都与您期望的列相匹配
参数;总是参数
ADO.NET有一个不友好的API;如上图所示,像Dapper这样的工具使它变得简单
我删除了sp_uu前缀;
这里的要点:
我正在使用实体框架6您好,您需要更加具体,而不是无法使其正常工作。。您使用了什么代码,得到了什么结果,遇到了什么问题?您可以提供示例吗?您编辑了问题并添加了我编写的无效代码您将SQL查询传递给SqlCommand,但您指定CommandType是存储过程名称。仅将名称传递给SqlCommand。参数应该添加到SqlCommand的参数集合中。@chickenmomo在字符串中嵌入参数的方法通常是个糟糕的主意-如果这些参数是硬编码的或配置提供的可信字符串,这可能没什么问题,但是如果数据来自您的应用程序执行,严重的话,不要这样做-这会对您造成很大伤害。参数是你的朋友,像Dapper这样的工具可以让使用参数成为一种无痛的体验。附加说明:sp_uu前缀由Microsoft保留-您不需要在自己的进程前面加上该前缀;现在几乎不应该使用DataTable;这看起来可能是EF或EF Core?
var connectionString = "my connection string";
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();
SqlCommand cmd = new SqlCommand("EXEC sp_return_records '2019-05-20','ABC';", conn);
cmd.CommandType = CommandType.StoredProcedure;
DataTable t1 = new DataTable();
using (SqlDataAdapter a = new SqlDataAdapter(cmd))
{
a.Fill(t1);
}
using System.Collections.Generic;
using System.Text;
using System.Web.Mvc;
using System.Data.Entity;
public class Car
{
public string Model{ get; set; }
public string Color{ get; set; }
public int Year { get; set; }
}
var sql = new StringBuilder();
sql.Append(" SELECT Model, Color, Year ");
sql.Append(" FROM TableCar ");
var list = someDBCONTEXT.Database.SqlQuery<Car>(sql.ToString()).ToList();