Tag: sql server 2000

HRESULT:0x8004D00E使用TransactionScope – C#

当我尝试在连接到SQL Server 2000的Windows Server 2003 Standard Edition SP1计算机上运行C#WinForms应用程序时,我收到以下错误,转换WinForms应用程序中的数据并将转换后的数据插入到SQL Server 2005应用程序中。 我使用SSPI连接到每个数据库。 代码包含在TransactionScope块中: System.TimeSpan TransactionTimeOut = new TimeSpan(0, 40, 0); using(TransactionScope Scope = new TransactionScope(TransactionScopeOption.RequiresNew, TransactionTimeOut)) { try { //meat of transaction… } catch(Exception ex) { throw ex; } Scope.Complete(); } 错误消息: 例外:事务已被隐式或显式提交或中止。 内部exception:事务已被隐式或显式提交或中止(HRESULTexception:0x8004D00E) 任何人都知道可能导致此问题的原因是什么?

SQL / C# – UPSERT上的主键错误

更新 (简化问题,从问题中删除C#) 在下列情况下,如何编写可以识别两行相同的UPSERT … 看看那里有一个\ b [退格]编码(奇怪的小角色)? SQL认为这些是相同的。 虽然我的UPSERT将此视为新数据并尝试INSERT,其中应该有更新。 //UPSERT INSERT INTO [table] SELECT [col1] = @col1, [col2] = @col2, [col3] = @col3, [col4] = @col4 FROM [table] WHERE NOT EXISTS — race condition risk here? ( SELECT 1 FROM [table] WHERE [col1] = @col1 AND [col2] = @col2 AND [col3] = @col3) UPDATE [table] […]

如何从SQL Server 2000 TEXT列中的C#String存储UTF-8字节

我有一个现有的SQL Server 2000数据库,它在文本列中存储文本的UTF-8表示。 我没有选择修改列的类型,并且必须能够将来自C#程序的非ASCII Unicode数据存储到该列中。 这是代码: sqlcmd.CommandText = “INSERT INTO Notes ” + “(UserID, LocationID, Note) ” + “VALUES (” + Note.UserId.ToString() + “, ” + Note.LocationID.ToString() + “, ” + “@note); ” + “SELECT CAST(SCOPE_IDENTITY() AS BIGINT) “; SqlParameter noteparam = new SqlParameter( “@note”, System.Data.SqlDbType.Text, int.MaxValue ); 在这一点上,我尝试了几种不同的方法将我的UTF-8数据放入参数中。 例如: // METHOD ONE byte[] bytes […]

更新大表(很多列)。 C#.NET

我必须更新一个包含超过270个更新字段的大表。 我是.NET的新手,需要建议在这种情况下使用什么更好:SqlCommand,某种内存映射表或DataSet,或者它是否存在使用来自DB的元数据的某种自动生成的对象? 请帮忙。 原因:我有一个旧的大型Delphi7应用程序,其中一部分负责监听socket上的一些数据包,这些数据包被编组到大型结构中,最后一步存储在DB中。 现在我将这部分移植到新的C#服务中,至少实际上我必须保留相同的逻辑。 问题是结构是BIG(超过220个字段),存储它的表有近300个字段。 从我的220个字段的结构中扣除/计算其他~50个字段,所有都应该在DB中更新。 实际的Delphi代码是丑陋的ant,它像桌子一样在几年内增长,如下所示: ‘UPDATE TABLE_NAME ‘ + ‘ MSG_TYPE = ‘ + IntToStr(integer(RecvSruct.MSG_TYPE)) + ‘ ‘ + ‘ ,SomeFLOATfield = ‘ + FloatToStr(RecvSruct.SomeFLOATfield) + ‘ ‘ + … //and other over 270 fileds here ‘WHERE ID = ‘ + IntToStr(obj.ID) 没有任何动态SQL等。实际上我无法改变数据库结构..所以我只能在代码中播放,我不确定是否有必要翻译代码。 表用于某些报告和统计信息。 一些计算/扣除的字段必须处理源代码中的一些常量。 使用开发工具:MS SQL Server 2000,C#.net2.0,VS2008

如何使用SqlConnection.GetSchema()获取列主键约束

我有一些ADO.NET代码来动态检测数据库模式,我需要的是如何使用SqlConnection上的GetSchema方法获取唯一列约束和主键约束。 这是我的代码: conn.Open(); SqlCommand mSqlCommand = new SqlCommand(“sp_pkeys”, conn); mSqlCommand.CommandType = CommandType.StoredProcedure; mSqlCommand.Parameters.Add( “@table_name”, SqlDbType.NVarChar).Value = tableName; SqlDataReader mReader = mSqlCommand.ExecuteReader( (CommandBehavior.KeyInfo | CommandBehavior.SchemaOnly)); //ExecuteReader(); DataTable schema = mReader.GetSchemaTable(); mReader.Close(); conn.Close();

如何使用.NET 2.0以编程方式复制SQL Server 2000表?

我想备份一个表,用另一个名称将副本保存在同一个数据库中。 我想以编程方式使用.NET 2.0(最好是C#)。 有人可以指出我该怎么办?

从DotNet执行存储过程需要很长时间,但在SSMS中它是立即的

我在SQL Server 2000上有一个存储过程,它有3个参数。 当我使用SqlCommand.ExecuteReader()从DotNet调用存储过程时,大约需要28秒。 当我在SSMS中直接运行相同的查询时,它会立即返回。 当我从存储过程中取出查询并使用DotNet直接运行时,它也会立即返回。 这些是SQL事件探查器会话的结果 SP内部网点 持续时间:28030 阅读:2663365 写道:0 SP内部SSMS 持续时间:450 阅读:23535 写道:65 直接在Dot Net内部查询 持续时间:360 阅读:24865 写道:57 以下事情对我来说很突出: SSMS中的统计数据和Dot Net中的直接查询非常相似 Dot Net SP可以执行大量读取但不会写入 另外两个读取很少,但有几个写入 任何帮助,将不胜感激。 以下是SP的略微观察版本: 我怀疑它是一个查询计划问题,因为即使我从DotNet反复运行它,我总是得到相同的结果。 这是由于IP问题而略微改变的SP版本。 我希望它仍然有意义: SELECT t1.pkiOrderID, t1.fkiBasketId, t1.sOriginBasketCode, t1.dtDateCreated, t1.sOrderCode, t1.fkiUserCde, t1.fkiOrgCde, t1.sApprovalPerson, t1.dtDateApproved, t1.sRequestNo, t1.dtRequiredDate, t1.Requestor, t1.OnBehalfOf, t1.OrderDesc, t1.OrderTypeId, t1.fkiAgentID, t1.fkiAgentRegionID, stat.iStatus, count(oi.pkiOrderItemId) as OrderItems, count(wf.fkiOrderId) […]

如何在sql中获取下一个自动增量值

我正在c#中创建一个winform应用程序并使用sql数据库。 我有一个表employee_master ,其中包含Id, name, address和phone no 。 Id是自动增量,所有其他数据类型都是varchar 。 我使用此代码获取下一个自动增量值: string s = “select max(id) as Id from Employee_Master”; SqlCommand cmd = new SqlCommand(s, obj.con); SqlDataReader dr = cmd.ExecuteReader(); dr.Read(); int i = Convert.ToInt16(dr[“Id”].ToString()); txtId.Text = (i + 1).ToString(); 我在textBox上显示。 但是当删除表中的最后一行时,我仍然得到最近在文本框中删除的值 我该如何获得下一个自动增量值?

如何在C#中监视SQL Server代理作业信息

我需要创建一个应用程序来监视SQL Server 2000代理作业状态和信息,当作业发生时与Windows应用程序事件日志中显示相同。 现在我已经通过连接字符串连接到数据库,但我不知道如何从Job获取状态和信息。 我需要在Textbox上显示状态和信息。 您有什么建议怎么办? 开发者工具 : MS SQL Sever 2000 SP4 MS Visual Studio 2008(C#) 我是菜鸟程序员。