Tag: ado.net

如何将具有反斜杠的连接字符串传递给SqlConnection?

我试图使用C#调用存储过程。 我在以下方面遇到问题。 SqlConnection(“Server=DB2\XPT;DataBase=SCFHP_EDI_P1;Integrated Security=SSPI”); 我无法使用的部分是服务器DB2\XPT 。 要将服务器名称用作DB2\XPT我需要做什么?

存储过程中的BulkCopy

我在数据库中有表A,B和C. 我必须将从A和B获得的结果放入表C中。 目前,我有一个SP,它将A和B的结果返回给C#应用程序。 使用“System.Data.SqlClient.SqlBulkCopy”将此结果复制到表C中。 advanat是在使用bulkcopy插入期间,不会创建日志文件。 我希望通过处理SP本身的插入来避免这种额外的流量。 但是,它不应该使用任何日志文件。 有没有办法实现这个目标? 请分享你的想法。 数据量 :150,000 数据库 :SQL Server 2005 数据库处于完全恢复模式; 它无法更改.. SELECT INTO在这种情况下有用吗? 编辑:当我使用System.Data.SqlClient.SqlBulkCopy时,操作在3分钟内完成; 在正常插入中需要30分钟……这个特殊操作无需恢复; 但是必须恢复数据库中的其他操作 – 因此我无法更改整个数据库的恢复模式。 谢谢 Lijo

文件上传并错误地保存到数据库

我在将文件上传到数据库时遇到了一些问题。 我上传的表格具有以下结构: dbo.Cover CoverID int PK CoverFileContent varbinary(max) CoverMimeType nvarchar(50) CoverFileName nvarchar(50) FileID int FK 我可以使用我的MVC应用程序上传文件而没有任何错误,但是在数据库中,文件在CoverFileContent中存储为“0x0000000000000000 ……”。 与文件相关的所有其他信息,例如MimeType,FileName,CoverID等,都可以正确上传。 我猜测这不正确,所以我下载了文件(创建了一个.net MVC下载器)。 它似乎下载为正确的文件类型,但是当我试图打开它时,它告诉我我无法打开它。 这是我正在遵循的原始教程: 教程 。 我已经完美地工作了,但是我想使用ADO.net,所以我重写了一点。 我没有做任何重大更改,但从我的代码中可以看出,所以我不确定为什么会发生这种情况。 我在我的应用程序中插入了断点,以查看字节数组是否实际被填充,这只是零,但只有零。 封面控制器 public ActionResult CreateCover(int id) { Cover cover = new Cover(); cover.FileID = id; return View(cover); } // //POST: /File/CreateCover [HttpPost] public ActionResult CreateCover(Cover cover) { cover.CoverMimeType = […]

使用c#从存储过程读出参数时出现问题

我只是遇到一个奇怪的问题,我无法检索sql存储过程输出参数值。 我解决了这个问题将近2个小时。 代码很简单 using (var con = new SqlConnection(connectionString)) { con.Open(); SqlCommand cmd = new SqlCommand(“sp_mgsearach”, con); cmd.CommandType = CommandType.StoredProcedure; SqlParameter param1 = new SqlParameter(“@SearchTerm”, SqlDbType.VarChar); param1.Value = searchTerm; param1.Direction = ParameterDirection.Input; cmd.Parameters.Add(param1); SqlParameter param2 = new SqlParameter(“@start”, SqlDbType.Int); param2.Value = start; param2.Direction = ParameterDirection.Input; cmd.Parameters.Add(param2); SqlParameter param3 = new SqlParameter(“@end”, SqlDbType.Int); param3.Value = end; […]

将数据插入到具有最佳性能的SQL Server中

我有一个密集使用DB(SQL Server)的应用程序。 因为它必须具有高性能,所以我想知道从执行时间的角度将记录插入DB.Fastest的最快方法。 我该怎么用? 据我所知,最快的方法是创建存储过程并从代码中调用它(ADO.NET)。 请让我知道有没有更好的方法,或者可能有其他一些提高性能的做法。

存储设置:XML与SQLite?

我目前正在编写一个IRC客户端,我一直在试图找出一种存储服务器设置的好方法。 基本上是大多数IRC客户端拥有的大型网络及其服务器列表。 我决定使用SQLite,但后来我想让这个列表以XML格式(也许是权威的)在线免费提供,供其他IRC应用程序使用。 所以现在我可以以相同的格式在本地存储设置。 我对ADO.NET或XML的经验很少,所以我不确定他们会在这种情况下如何比较。 是否更容易以编程方式工作? 一个更快吗? 有关系吗?

如何从Sql表中检索DataColumn.DefaultValue?

有没有办法使用ado.net从Sql数据库中确定列的默认值? 我尝试使用SqlDataAdapter的FillSchema方法: using (SqlDataAdapter adapter = new SqlDataAdapter()) { adapter.SelectCommand = myConnection.CreateCommand(); adapter.SelectCommand.CommandType = CommandType.Text; adapter.SelectCommand.CommandText = “SELECT * FROM myTable”; DataTable table = new DataTable(); adapter.Fill(table); adapter.FillSchema(table, SchemaType.Mapped); } 当我检查DataTable的DataColumns时,我可以确定列是否是AutoIncrement ,并且可以使用AllowDBNull属性确定它是否允许空值。 但是, DefaultValue (对于我知道具有默认值的列)始终为null 。 我考虑过: DataTable schemaTable = null; using (SqlDataReader reader = adapter.SelectCommand.ExecuteReader(CommandBehavior.SchemaOnly)) { schemaTable = reader.GetSchemaTable(); reader.Close(); } 但是DefaultValue不包含在架构中。 那么……我怎样才能得到一个专栏的DefaultValue ?

C#如何获取每个列的类型和长度,然后使用长度填充以获取每个字段末尾的空格

我有一个控制台应用程序,它将SQL表中的数据提取到平面文件。 如何获取每个列的类型和长度,然后使用每列的长度填充(长度)以获取每个字段末尾的空格。 以下是我现在所拥有的不包含此function的内容。 谢谢 { var destination = args[0]; var command = string.Format(“Select * from {0}”, Validator.Check(args[1])); var connectionstring = string.Format(“Data Source={0}; Initial Catalog=dbname;Integrated Security=SSPI;”, args[2]); var helper = new SqlHelper(command, CommandType.Text, connectionstring); using (StreamWriter writer = new StreamWriter(destination)) using (IDataReader reader = helper.ExecuteReader()) { while (reader.Read()) { Object[] values = new Object[reader.FieldCount]; int fieldCount […]

“事务已在事务范围内隐式或显式提交或中止”

我在两个不同的网络上有一个Web服务器和两个DB服务器,Db1和Db2(远程数据库)。 DB1:SQL Server 2008 R2,操作系统:Windows Server 2003 SP2 DB2:SQL Server 2000,操作系统:Windows Server 2003 R2 Web服务器:Windows Server 2003 R2 我想在这些数据库中插入两个不同的记录,我正在使用TransactionScope 。 using (TransactionScope tscope = new TransactionScope(TransactionScopeOption.RequiresNew)) { //open connection db 1 //insert into db1 //open connection db2 — the problem is here //insert into db2 tscope.Complete(); } 当我跟踪源代码时,插入第一个数据库成功完成但是当第二个连接想要打开时我遇到下面的错误。 错误: 事务已被隐式或显式提交或中止。 我已经配置了MSDTC,Distributrd事务协调器,一切都还可以。 我可以在我的数据库服务器中分配事务,我没有问题。 TransactionScope什么问题? 请帮我。 LINQ […]

在Ado.net C中动态构建Where子句#

我将在给定时间内接收大约1000条记录,我必须确定它们是现有记录还是新记录。 如果它们存在,我必须更新记录,如果是新的,则只需插入它们。 我不知道他们中的任何一个是否存在,或者它们是否都存在。 我认为最好对数据库进行一次查询并尝试查找数据库中是否存在任何查询并将其存储在内存中并在内存中检查该集合并检查它。 最初我被告知我1场将足以确定唯一性。 所以我想我可以在数据库中对1个字段做一个大的in子句,但现在我发现情况并非如此,我需要使用3个字段来确定记录是存在还是现在。 这基本上是一个和条款 select * from where columnA = “1” and ColumnB = “2” and ColumnC = “3” 我怎样才能在C#ado.net中正确地识别它? 我猜我需要有一些超级where子句? select * from where (columnA = “1” and ColumnB = “2” and ColumnC = “3”) or (columnA = “4” and ColumnB = “5” and ColumnC = “6”) or [….998 more conditional […]