.NET Core中的原始SQL

时间:2017-04-25 12:56:51

标签: c# sql .net-core

我有这个问题:我需要从我的.NET Core应用程序执行原始SQL。所以我有这个代码

var sqlConnection1 = new SqlConnection("Server=(localdb)\\mssqllocaldb;Database=MyDB;Trusted_Connection=True;MultipleActiveResultSets=true");
var cmd = new SqlCommand
{
    CommandText = "SELECT * FROM dbo.Candidates WHERE id = " + model.CandidateId,
    CommandType = CommandType.Text,
    Connection = sqlConnection1
};

sqlConnection1.Open();
var wantedRow = cmd.ExecuteReader();
sqlConnection1.Close();

我无法访问wantedRow中的数据... (当我使用Entity Framework时,此查询有效,但我无法使用Entity Framework)。是否可以在.NET Core中使用?

3 个答案:

答案 0 :(得分:9)

首先,您的代码是sql injection attacks的一扇门。使用参数化查询而不是连接字符串。

第二次,对实现IDisposable接口的所有内容使用using语句。在这种情况下 - 连接,命令和阅读器。

第三次,让读者只是工作的一部分。您仍然需要使用reader.Read()并获取值。

using(var sqlConnection1 = new SqlConnection("Server=(localdb)\\mssqllocaldb;Database=MyDB;Trusted_Connection=True;MultipleActiveResultSets=true"))
{ 
    using(var cmd = new SqlCommand()
    {
        CommandText = "SELECT * FROM dbo.Candidates WHERE id = @id",
        CommandType = CommandType.Text,
        Connection = sqlConnection1
    })
    {
        cmd.Parameters.Add("@id", SqlDbType.Int).Value = model.CandidateId
        sqlConnection1.Open();

        using(var reader = cmd.ExecuteReader())
        {
            if(reader.Read())
            {
                var id = reader[0];
                var whatEver = reader[1];
                // get the rest of the columns you need the same way
            }
        }
    }
}

答案 1 :(得分:2)

您可以尝试使用如下方法并尝试访问SQLDataReader:

SqlDataReader reader = command.ExecuteReader();

while (reader.Read())
{
    Console.WriteLine(String.Format("{0}", reader[0]));
}

答案 2 :(得分:2)

ExecuteReader应该返回SqlDataReader,这意味着你应该做类似

的事情
while(wantedRow.Read())
{
    var aValue = wantedRow[0].Value;
}