标签: sqlclient

你能用ADO.NET SQLCommandBuilder和复合键吗?

我有一个包含6列的数据库表.主键是由6列中的5列组成的复合键

我正在尝试使用SqlClient.SqlCommandBuilder.GetDeleteCommand删除行.

但是我收到以下错误:

"System.InvalidOperationException:对于不返回任何键列信息的SelectCommand,不支持DeleteCommand的动态SQL生成."

SelectCommmand包含表中的所有列:

SELECT  TABLENAME.COL1, TABLENAME.COL2, TABLENAME.COL3, 
        TABLENAME.COL4, TABLENAME.COL5, TABLENAME.COL6
FROM TABLENAME  
Run Code Online (Sandbox Code Playgroud)

问题可能是复合键吗?

ado.net sqlcommandbuilder sqlclient

5
推荐指数
1
解决办法
902
查看次数

SQL Runnnig多次执行同一查询

我有一个查询,该查询为我提供了两个日期start_date和end_date之间的COUNT,并按各个列进行了分组。有什么办法可以让我每天获得COUNT个?就像说start_date是date1和end_date是date5一样,因此我需要对“ date1到date2”,“ date1到date3”,“ date1到date4”,然后“ date1到date5”运行一次查询。是否像基于开始日期和结束日期多次运行同一查询?我的查询看起来像

Select COUNT(A), B, C, D
FROM TABLE 
WHERE CONDITION1 AND DATE BETWEEN start_date AND end_date
GROUP BY B, C, D
Run Code Online (Sandbox Code Playgroud)

sql sqlclient vertica vsql

5
推荐指数
1
解决办法
1755
查看次数

在循环内添加SQL参数,在循环外执行。(在C#SQL Client中使用参数进行单查询多插入)

因此,要进行多行插入查询,我需要在具有值的循环内将键替换为值。

它通过将值硬编码到查询字符串中来工作,但是我需要使用“ cmd.Parameters.AddValue()cmd.Parameters.AddWithValue()” 来完成此操作,因为我需要防止SQL注入。

所以,我的代码是这样的:

         string query = "insert into dbo.Foo (column1, column2, column3) values ";    
         SqlCommand cmd
            foreach (line in rowsArray) {
                cmd.Parameters.Clear();
                cmd = new SqlCommand(query, cnn); //So, the problem is this override
                query += "(@key1, @key2, @key3), ";

                cmd.Parameters.AddWithValue("@key1", line.value1);
                cmd.Parameters.AddWithValue("@key2", line.value2);
                cmd.Parameters.AddWithValue("@key3", line.value3);
            } 
         query = query.Substring(0, query.Length-2); //Last comma
         cmd.ExecuteNonQuery();
         cnn.Close();
Run Code Online (Sandbox Code Playgroud)

我想ExecuteNonQuery();跳出循环,只插入一个。

有任何想法吗?

我曾考虑过创建一个循环,在该循环中,我用一个标识符添加字符串中的键,然后用相同的ID替换所有的键,以迭代另一个循环,但我认为这样做不是非常有效或很好的做法。

c# sql sql-server sqlclient

5
推荐指数
1
解决办法
106
查看次数

SQL Server 长时间运行的查询通过 .Net 随机超时

我们有一个程序连接到我们的数据库并运行一些存储过程来获取一些数据。

数据库是 SQL Server 2008,程序在本地运行。连接是通过 TCP/IP 进行的,但已启用共享内存。并且连接字符串的超时设置为 45 秒。

当我们通过 SQL Server Management Studio 运行它们时,运行需要 0-5 秒。当我们通过代码运行它时,它会随机超时。

为了进行一些测试,我们将超时时间从 45 秒增加到几分钟。并且为了丢弃任何阻塞问题,我们检查了存储过程仅“选择”数据(没有插入或更新语句)。我们已经为 select 语句尝试了几个表修饰符,例如:nolock, readpast, ...

我也检查过sp_who2dbcc opentran()没有任何东西被阻止.......Net 的 SPID 是running command .... 有关 .Net 在等待 DB 回答时的更多详细信息,通过 SQL Server Management Studio,我可以毫无问题地运行相同的语句(存储过程或选择)。

关于发生了什么的任何建议?

.net c# sql-server timeout sqlclient

4
推荐指数
1
解决办法
7022
查看次数

为什么SqlClient在传递SqlXml时会使用不必要的XML转换?

我有一个关于将xml数据类型传递给C#代码的查询的问题.

首先,这里是SQL Server上的一个表:

CREATE TABLE [dbo].[XmlTable](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [dat] [xml] NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

其次,我有一个用C#编写的应用程序.然后我XmlTable从应用程序中插入行.

这是代码:

XDocument doc = new XDocument(new XElement("root",
     new XElement("abc", "123"),
     new XElement("cba", "321")));

var reader = new XmlTextReader(new StringReader(doc.ToString()));
var xml = new SqlXml(reader);

using (var connection = new SqlConnection(_connectionString))
{
     using (var command = new SqlCommand("insert into XmlTable (dat) values(@data)", connection))
     {
          command.Parameters.Add(new SqlParameter("@data", SqlDbType.Xml){Value = xml});
          connection.Open();
          command.ExecuteNonQuery();
     }
}
Run Code Online (Sandbox Code Playgroud)

一切正常,插入行.但是,如果我运行SQL事件探查器并检查插入命令,我会看到以下内容:

declare @p3 xml
set @p3=convert(xml,N'<root><abc>123</abc><cba>321</cba></root>')
exec sp_executesql N'insert …
Run Code Online (Sandbox Code Playgroud)

c# xml sql sql-server sqlclient

4
推荐指数
1
解决办法
729
查看次数

减少C#中的使用次数

我的问题可能是愚蠢的,或者根本不是一个问题,但在这里......

我在我的ASP.net MVC项目中执行了一些数据库操作,我每次创建两个对象,SqlConnectionSqlCommand.

我在下面展示了一个例子

using (SqlConnection connection = new SqlConnection(connectionString))
{
  using (SqlCommand command = new SqlCommand("sRegisterUser", connection))
  {
Run Code Online (Sandbox Code Playgroud)

在不同方法的一个类中进行所有这些不同的操作.

我的问题是如何每次都减少这些对象的创建?我如何在全球范围内创建它们

PS:sRegisterUser是一个存储过程,就像明智的其他方法一样,使用不同的过程,它们将不同的值作为参数.

请帮帮我.

在此先感谢您的帮助.

.net c# using sqlclient asp.net-mvc-4

4
推荐指数
1
解决办法
210
查看次数

将ASP.NET Core + EF发布到Azure无法加载DLL'sni.dll'

使用EF将ASP.NET Core应用程序发布到Azure Web App时,在连接SQL Server时会出现此错误:

info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
      Executing action method SearchDocumentsWebApp.Controllers.SearchApiController.SearchByTopic (SearchDocumentsWebApp) with arguments (info) - ModelState is Valid
warn: Microsoft.EntityFrameworkCore.Query.Internal.SqlServerQueryCompilationContextFactory[8]
      The LINQ expression '[e].Id.Equals(__email_0, CurrentCultureIgnoreCase)' could not be translated and will be evaluated locally. To configure this warning use the DbContextOptionsBuilder.ConfigureWarnings API (event id 'RelationalEventId.QueryClientEvaluationWarning'). ConfigureWarnings can be used when overriding the DbContext.OnConfiguring method or using AddDbContext on the application service provider.
warn: Microsoft.EntityFrameworkCore.Query.Internal.SqlServerQueryCompilationContextFactory[8]
      The LINQ expression 'SingleOrDefault()' could not be translated and will be evaluated locally. To configure …
Run Code Online (Sandbox Code Playgroud)

entity-framework web-applications azure sqlclient asp.net-core

4
推荐指数
1
解决办法
895
查看次数

数据集列名和行值

我有一个数据集:

DataSet ds= _ExecuteQuery(contentCmd, CommandType.Text, contentParams);

// Column name
foreach (DataColumn column in ds.Tables[0].Columns)
{
  Console.WriteLine(column.ColumnName);
}

// Rows value
foreach (DataTable dt in ds.Tables){
     foreach (DataRow dr in dt.Rows){
        Console.Writeline(dr.Table.Rows[0]["name"].ToString());
     }
}
Run Code Online (Sandbox Code Playgroud)

如何检索行的行值和列名?

List<columnName, name>;
Run Code Online (Sandbox Code Playgroud)

c# dataset sqlclient

4
推荐指数
1
解决办法
2万
查看次数

使用 SqlClient 类时如何在 SQL Server 中获取插入的 ID?

所以这是帖子的延续: 获取插入行标识的最佳方法?

那个帖子提议,我同意,使用Inserted功能来安全地返回插入的id列。

在实现此功能时,似乎SqlClient.net 框架不支持此功能,并且在尝试执行命令时失败,我收到以下异常:

System.Data.SqlClient.SqlException: '找不到列“INSERTED”或用户定义的函数或聚合“INSERTED.Id”,或者名称不明确。

我只是在使用:

return (T)command.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)

查询在哪里:

INSERT INTO MyTable 
OUTPUT INSERTED.Id 
(Description) 
VALUES (@Description)
Run Code Online (Sandbox Code Playgroud)

并且该表仅包含

ID (identity int)
Description (varchar(max))
Run Code Online (Sandbox Code Playgroud)

如果不可能,是否有其他安全的方法而不在中间使用可能影响性能的变量?

谢谢

sql-server identity insert sqlclient

4
推荐指数
1
解决办法
419
查看次数

.NET 标准 2.0 数据.OleDb

在下图中可以看到两个项目(Visual Studio 2017 v15.9.6):

在此输入图像描述

-GeneralFunctions 是 .NET 标准 2.0

-TestFramework 是 .NET Framework 4.6.1

我的想法是在 .NET Std 项目中开发一些功能并从 .NET Framework 访问它们。我一直在努力使“System.Data.SqlClient .SqlConnection ”和“System.Data.Odbc .OdbcConnection ”正常工作。在这里回答

现在我想实现“System.Data.OleDb .OleDbConnection ”,但我找不到它的 NuGet 包。

Dim connection As IDbConnection
connection = New System.Data.SqlClient.SqlConnection("")
connection = New System.Data.Odbc.OdbcConnection("")
connection = New System.Data.OleDb.OleDbConnection("")
Run Code Online (Sandbox Code Playgroud)

OleDB 的错误是:错误 BC30002 类型“System.Data.OleDb.OleDbConnection”未定义。

.net vb.net oledb sqlclient .net-standard

4
推荐指数
1
解决办法
2582
查看次数