Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从C执行SQL字符串,并将返回的结果存储在DataTable或其他适当的数据结构中?_C#_Sql Server - Fatal编程技术网

C# 如何从C执行SQL字符串,并将返回的结果存储在DataTable或其他适当的数据结构中?

C# 如何从C执行SQL字符串,并将返回的结果存储在DataTable或其他适当的数据结构中?,c#,sql-server,C#,Sql Server,我有一个字符串,在通过SQL Server Management Studio执行时返回大量记录: 需要将上述每条语句的结果写入不同的CSV文件。我需要一个通用的解决方案,它独立于传递给存储过程的参数,并将执行语句的结果存储在适当的数据结构(可能是DataTable)中?然后我可以解析数据并将其写入不同的CSV文件。 尝试使用SqlDataAdapter并将结果存储在数据表中,但无法使其工作 var connectionString = "my connection string";

我有一个字符串,在通过SQL Server Management Studio执行时返回大量记录:

需要将上述每条语句的结果写入不同的CSV文件。我需要一个通用的解决方案,它独立于传递给存储过程的参数,并将执行语句的结果存储在适当的数据结构(可能是DataTable)中?然后我可以解析数据并将其写入不同的CSV文件。 尝试使用SqlDataAdapter并将结果存储在数据表中,但无法使其工作

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();