我正在尝试使用SqlCommand更新MSSQL表,我认为这是我的T-SQL的语法错误,但是到目前为止,这是我所拥有的:
SqlCommand sqlCmd = new SqlCommand("UPDATE yak_tickets SET email = @emailParam, subject = @subjectParam, text = @textParam, statusid = @statusIDParam, ticketClass = @ticketClassParam WHERE id = @ticketIDParam", sqlConn);
Run Code Online (Sandbox Code Playgroud)
参数正在按应有的方式工作,但是,当我运行代码时,表永远不会更新。任何帮助将不胜感激=)
这是其余的代码:
#region Parameters
/* Parameters */
sqlCmd.Parameters.Add("@ticketIDParam", SqlDbType.BigInt);
sqlCmd.Parameters["@ticketIDParam"].Value = ticketID;
sqlCmd.Parameters.Add("@emailParam", SqlDbType.NVarChar);
sqlCmd.Parameters["@emailParam"].Value = ticketToBeSubmitted.getEmail();
sqlCmd.Parameters.Add("@subjectParam", SqlDbType.NVarChar);
sqlCmd.Parameters["@subjectParam"].Value = ticketToBeSubmitted.getSubject();
sqlCmd.Parameters.Add("@textParam", SqlDbType.Text);
sqlCmd.Parameters["@textParam"].Value = ticketToBeSubmitted.getTicketContent();
sqlCmd.Parameters.Add("@statusIDParam", SqlDbType.NVarChar);
sqlCmd.Parameters["@statusIDParam"].Value = ticketToBeSubmitted.getStatus();
sqlCmd.Parameters.Add("@ticketClassParam", SqlDbType.NVarChar);
sqlCmd.Parameters["@ticketClassParam"].Value = ticketToBeSubmitted.getTicketClass();
#endregion
#region Try/Catch/Finally
/* Try/Catch/Finally */
try
{
sqlConn.Open();
sqlCmd.ExecuteNonQuery();
}
catch (SqlException sqlEx)
{ …Run Code Online (Sandbox Code Playgroud) 注意:我无法在搜索中找到这个确切的问题.我在Stack Overflow上找到了一个类似的问题,这让我得到了解决方案.我发布了问题和解决方案,以便下一个有问题的人可以更轻松地找到解决方案.如果仍然可以,我会提出社区维基的问题 - 我不是在寻找代表.
我试图使用ADO.NET来调用SQL Server 2005存储过程,该过程接受Xml类型的参数:
CREATE PROCEDURE dbo.SomeProcedure(
@ListOfIds Xml)
AS
BEGIN
DECLARE
@Ids TABLE(ID Int);
INSERT INTO @Ids
SELECT ParamValues.ID.value('.', 'Int')
FROM @ListOfIds.nodes('/Persons/id') AS ParamValues(ID);
SELECT p.Id,
p.FirstName,
p.LastName
FROM Persons AS p
INNER JOIN @Ids AS i ON p.Id = i.ID;
END;
Run Code Online (Sandbox Code Playgroud)
我将XML作为LINQ传递给XML XElement对象
var idList = new XElement(
"Persons",
from i in selectedPeople
select new XElement("id", i));
Run Code Online (Sandbox Code Playgroud)
后来
SqlCommand cmd = new SqlCommand
{
Connection = conn,
CommandText = "dbo.SomeProcedure",
CommandType = …Run Code Online (Sandbox Code Playgroud) 我们在IIS中托管了WCF服务,在服务器上运行.该服务连接到另一台服务器上运行的SQL Server实例.在我们的代码中,我们打开并关闭每个请求的连接.WCF服务每分钟向数据库发出几个请求.
如果我在不停止WCF服务的情况下重新启动SQL服务,则WCF服务会开始将错误记录到错误日志中,这是完全正常的.
问题是,有时(并非总是),在SQL服务重新启动后,WCF服务会继续在每个请求上报告此错误:
Cannot open database "mydatabase" requested by the login. The login failed."
Run Code Online (Sandbox Code Playgroud)
错误的堆栈跟踪结束于:
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
Run Code Online (Sandbox Code Playgroud)
在发生这种情况时,我可以使用SQL Management Studio(来自运行WCF服务的同一台机器)连接到数据库.要解决此问题,我必须为我的WCF服务回收应用程序池.
所以我的问题是:什么可以导致这个,我该怎么做才能确保我的应用程序可以从SQL重启中恢复?
PS:在我的开发盒(也运行IIS)上,当我进行相同的测试时,我得到相同的错误几次(当数据库开始加载时我猜)然后它再次开始工作.
我正在尝试创建一个dbTyped和大小的SqlParameters数组.这工作正常,但如果我需要另一列,则会导致两个地方都更改代码.
SqlParameter[] parameters = {
new SqlParameter("@first_name", SqlDbType.VarChar, 50),
new SqlParameter("@last_name", SqlDbType.VarChar, 50),
new SqlParameter("@middle_name", SqlDbType.VarChar, 50),
new SqlParameter("@empid", SqlDbType.Int)
};
parameters[0].Value = to.FirstName;
parameters[1].Value = to.LastName;
parameters[2].Value = to.MiddleName;
parameters[3].Value = to.EmpId;
Run Code Online (Sandbox Code Playgroud)
这样做的更好方法是什么?
我正在编写一个气象站,它从 API 获取数据。这工作正常,但我想将其存储在数据库中以用它绘制图表。但我的代码似乎不起作用。我尝试调试它,但它在我想要打开数据库的行上失败。它贯穿我创建数据库的行。
这些是失败的线路:
databaseCon = new SqlConnection(@"Data Source=
(LocalDB)\v10.0;AttachDbFilename=C:\Users\Jeroen
Laptop\Desktop\Eindopdrachten\WeatherStation\Eindopdracht\
Weather.mdf;Integrated Security=True;");
databaseCon.Open();
Run Code Online (Sandbox Code Playgroud)
控制台中的错误消息:
System.Data.dll 中发生“System.Data.SqlClient.SqlException”类型的第一次机会异常
会发生什么:
我想从 API 获取数据并将其放入数据库中以制作包含温度、位置和日期的图表。为此,我创建了一个数据库,并且我想与其连接。这就是错误发生的地方。我从上面得到了错误。当我调试时,该消息会显示几次(100 次左右)并继续运行,而不填充数据库。
我希望这里有人能给我更多信息或者能看到我做错了什么。
更新:
当我尝试访问数据库时收到以下消息
System.Data.dll 中发生“System.Data.SqlClient.SqlException”类型的未处理异常
其他信息:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供商:SQL 网络接口,错误:52 - 无法找到本地数据库运行时安装。验证 SQL Server Express 是否已正确安装以及本地数据库运行时功能是否已启用。)
我将 Visual Studio 2010 与 SQL Server 2008 一起使用。我的编程笔记本电脑不支持 2012。
我正在连接到SQL Server 2012数据库,以基于ID查询单个值。(可能值得一提的是,该数据库位于我的开发机器上的另一大陆的服务器上,因此延迟非常高。大约100毫秒左右)。
该查询似乎已成功执行。该对象的HasRows属性SqlDataReader设置为true,因此我尝试使用该值来分配变量。当我正常运行程序时,遇到message异常'Given key was not present in the dictionary'。如果我停止执行并检查SqlDataReader对象,并枚举结果。首先,我被告知'enumeration yielded no results',然后当我继续执行时,消息中出现另一个异常'invalid attempt to read when no data is present'
这是有问题的代码:
SqlConnection sql_conn = new SqlConnection(ConnectionString);
SqlCommand sql_cmd = new SqlCommand(String.Format("select ItemType from ItemTable where ItemID='{0}'", item_id), sql_conn);
Console.WriteLine(sql_cmd.CommandText);
sql_conn.Open();
SqlDataReader rdr = sql_cmd.ExecuteReader();
rdr.Read();
if (rdr.HasRows) //True
{
item_type= TypesMap[rdr["ItemType"].ToString()]; //Either 'given key not found in dictionary' or 'invalid attempt to read when no data is …Run Code Online (Sandbox Code Playgroud) 实际执行需要时间的SQL Server调用时,SqlDataReader.ReadAsync()对我来说是同步运行的。有什么方法可以强制它异步运行,还是我调用它的唯一选择Task.Run()?
这是一个复制品。它使用winforms演示该调用阻塞了GUI线程。请注意,T-SQL必须实际执行某项操作-使用不能重现WAITFOR DELAY '00:00:20'。
using System;
using System.Configuration;
using System.Data.Common;
using System.Data.SqlClient;
using System.Threading.Tasks;
using System.Windows.Forms;
static class SqlDataReaderReadAsyncProgram
{
static async void Form_Shown(object sender, EventArgs e)
{
var form = (Form)sender;
// Declare your connection string in app.config like
// <connectionStrings><remove name="LocalSqlServer"/><add name="LocalSqlServer" connectionString="Data Source=localhost\SQLEXPRESS;Integrated Security=true"/></connectionStrings>
using (DbConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings[0].ConnectionString))
{
form.Text = "connecting…";
await connection.OpenAsync();
form.Text = "connected!";
// Install a stored procedure.
using (var command = connection.CreateCommand()) …Run Code Online (Sandbox Code Playgroud) 我正在努力将控制台应用程序从 .NET Framework 4.6.2 移植到 .NET Core 2.0。该应用程序需要连接到一个数据库,该数据库的平台在编译时未知。在完整的框架中,这可以通过使用DbProviderFactories.NET Core 2.0 中不再存在的机制轻松实现。
首先,我想我可以简单地DbProviderFactory自己动态加载相应的内容,使用类似于以下的代码:
public static DbProviderFactory GetFactory(string providerInvariantName)
{
Type type = Type.GetType(dbProvider.Type);
if (null != type)
{
FieldInfo field = type.GetField("Instance", BindingFlags.DeclaredOnly | BindingFlags.Static | BindingFlags.Public);
if (null != field && field.FieldType.IsSubclassOf(typeof(DbProviderFactory)))
{
object value = field.GetValue(null);
if (value != null)
{
return (DbProviderFactory)value;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如在这个图书馆中所做的那样。只要DbProviderFactory在编译时引用包含 的程序集,此代码就可以正常工作(这违背了动态加载的目的)。
我试图直接放入System.Data.SqlClient.dll应用程序的文件夹中,但是该Instance字段是null因为这似乎只是不同runtimes程序集的存根实现。当静态引用时,编译器会生成一个.deps.json指向这些文件的详细文件。这里只是为了给人留下印象而做的一个小改动:
... …Run Code Online (Sandbox Code Playgroud) 我正在开发多个 ASP.NET Web 服务,这些服务使用 SQL Server 进行存储并使用 Azure Application Insights 进行遥测。在 IISExpress 下本地运行服务时,我没有在依赖遥测中获得完整的 SQL 命令文本(尽管在调用 SP 时我确实看到了存储过程名称),所以我遵循了文档中针对这种情况的建议,并从System.Data.SqlClient 到新的 Microsoft.Data.SqlClient 包。
现在我没有看到来自使用 Microsoft.Data.SqlClient 的任何组件的任何 SQL 依赖遥测。这不是我希望的结果。
在更改之前,依赖遥测中的 sdkVersion 是“rddf:2.11.2-28447”。文档说我应该在这里看到一个“rddp:”前缀,但由于不再有任何SQL 遥测,我没有任何东西要检查。
一项服务使用 Microsoft.AspNet.Identity.EntityFramework 中的一些代码,该代码继续使用 System.Data.SqlClient(不确定如何更改)。仍在为这些类生成 SQL 依赖遥测,但当然不包括完整的命令文本,并且仍然具有“rddf:”SDK 版本前缀。
我需要做什么才能获得包含完整命令文本的 SQL 依赖遥测?
一些细节:
sql-server asp.net azure sqlclient azure-application-insights
System.PlatformNotSupportedException in Microsoft.Data.SqlClient.dll: 'Strings.PlatformNotSupported_DataSqlClient'我正在尝试将我的 azure 函数应用程序作为 docker 映像运行,当我这样做时,每当我尝试调用我的数据层(无论我使用的是 EF Core 还是 Dapper)时,它都会抛出异常。当我将 API 项目设置为启动而不是 docker 映像时,我可以很好地运行该应用程序。
那里有非常相似的问题,但没有一个考虑到它仅在我尝试将其作为 docker 映像运行或我的目标框架是netcoreapp3.1. 我已经尝试过类似问题所说的内容。这是添加System.Data.SqlClient为 Nuget 包,无论我制作什么版本都没有帮助。
我怀疑我需要添加一些东西Dockerfile or something.
编辑:我可以通过简单地创建一个azure函数、添加docker支持、创建一个在本地数据库上执行CRUD操作的简单数据层、然后运行docker映像并调用执行此操作的端点来在新项目中重新创建该问题CRUD 操作。希望有帮助。