Tag: sql

将SQL表转换为mongoDB文档

将一个SQL数据库(例如1个表)转换为mongoDB文档的最佳方法是什么? 我想我可以使用C#驱动程序并实现一个循环,它选择表中的每一行并将其保存在Mongo中。但是,我正在寻找一种更好的方法来转换大量数据..

抛出exception时,确保SQL连接关闭的正确方法是什么?

我经常使用看起来像这样的模式。 我想知道这是否正常,或者是否有最佳实践我不在这里申请。 我特别想知道; 在抛出exception的情况下,我在finally块中的代码足以确保连接被正确关闭? public class SomeDataClass : IDisposable { private SqlConnection _conn; //constructors and methods private DoSomethingWithTheSqlConnection() { //some code excluded for brevity try { using (SqlCommand cmd = new SqlCommand(SqlQuery.CountSomething, _SqlConnection)) { _SqlConnection.Open(); countOfSomething = Convert.ToInt32(cmd.ExecuteScalar()); } } finally { //is this the best way? if (_SqlConnection.State == ConnectionState.Closed) _SqlConnection.Close(); } //some code […]

IDENTITY_INSERT问题设置为OFF? : – /

我正在尝试将订单详细信息插入到我的数据库中,它一直在说: 当IDENTITY_INSERT设置为OFF时,无法在表’Orders’中为identity列插入显式值。 我所要做的就是通过使用WebSecurity.CurrentUserId将用户UserId插入UserId列 – 为什么这不起作用? 我有: dbase.Execute(“INSERT INTO Orders (UserId, OrderId, Status) VALUES (@0, @1, @2)”, WebSecurity.CurrentUserId, Session[“OSFOID”], “Confirmed”);` 所以,正如你所看到的,它非常简单。 但是,为什么它不起作用? 我的表定义是:

使用ado.net通过C#将值插入SQL Server数据库

我创建了一个简单的程序来将值插入表[regist] ,但我一直收到错误 ‘)附近的语法不正确 on cmd.ExecuteNonQuery(); : private void button1_Click(object sender, EventArgs e) { SqlConnection cn = new SqlConnection(“Data Source=DELL-PC;initial catalog=AdventureWorks2008R2 ; User ID=sa;Password=sqlpass;Integrated Security=SSPI;”); SqlCommand cmd = new SqlCommand(“INSERT INTO dbo.regist (” + ” FirstName, Lastname, Username, Password, Age, Gender,Contact, ” + “) VALUES (” + ” @textBox1.Text, @textBox2.Text, @textBox3.Text, @textBox4.Text, @comboBox1.Text,@comboBox2.Text,@textBox7.Text” + “)”, cn); […]

更新实体列表的有效方法

我正在开发一个允许用户编辑实体列表的项目。 我将这些实体映射到视图模型并使用编辑器字段显示它们。 当用户按下提交按钮时,我会浏览每个模型并进行更新,如下所示: foreach (var viewModel in viewModels) { //Find the database model and set the value and update var entity = unit.EntityRepository.GetByID(fieldModel.ID); entity.Value = viewModel.Value; unit.EntityRepository.Update(entity); } 上面的代码可以工作,但是你可以看到我们需要为每个实体命中两次数据库(一次检索,另一次更新)。 使用Entity Framework有更有效的方法吗? 我注意到每个更新都会生成一个单独的SQL语句。 循环结束后是否有提交所有更新的方法?

LINQ等于而不是包含

我需要使用equal而不是Contains。 我有一个名为selectedDeviceTypeIDs的代码数组我假设它有两个代码{1,2} 如果设备ID完全是{1,2},我需要从查询中获取结果,所以我用selectedDeviceTypeIDs.equal或类似的东西替换selectedDeviceTypeIDs.Contains … m => m.Devices.Any(w => selectedDeviceTypeIDs.Contains(w.DeviceTypeID) if (DeviceTypeIDs != null) { Guid[] selectedDeviceTypeIDs = DeviceTypeIDs.Split(‘,’).Select(Guid.Parse).ToArray(); query = query.Where(j => j.HospitalDepartments.Any(jj => jj.Units.Any(m => m.Devices.Any(w => selectedDeviceTypeIDs.Contains(w.DeviceTypeID))))); }

如何在C#中显示SQL“PRINT”命令的输出?

我有一个总是返回“PRINT”命令的SQL过程,我想提取这个“PRINT”命令的输出,即C#中的过程我该怎么做? 这是程序 ALTER PROC ResultsPoll @pollid INT AS DECLARE @count1 INT DECLARE @count2 INT DECLARE @count3 INT DECLARE @count4 INT DECLARE @count5 INT DECLARE @test VARCHAR(MAX) DECLARE @value VARCHAR(MAX) SELECT @count1 = COUNT(mem_id) FROM Students_answer_Polls INNER JOIN Polls ON Polls.poll_id = Students_answer_Polls.poll_id WHERE Students_answer_Polls.poll_id = @pollid AND Students_answer_Polls.answer = Polls.a1 SELECT @count2 = COUNT(mem_id) FROM […]

从SQL Server存储过程获取值输出到变量

这似乎是一个简单的问题,但我还没有找到答案。 我有以下存储过程 CREATE PROCEDURE [dbo].[AllocateId] AS BEGIN TRANSACTION UPDATE TOP(1) IdReservation SET IsAllocated = 1 OUTPUT DELETED.Id WHERE IsAllocated = 0 COMMIT TRANSACTION GO 它已经在C#+ EF代码中使用,没有问题通过ObjectContext的ExecuteFunction ObjectResult objectResult = ExecuteFunction(“AllocateId”); 但是,当我尝试直接从SQL脚本调用它时,它似乎不起作用 declare @Id int EXEC @Id = [dbo].[AllocateId] @Id始终为0.如何在sql脚本中将值输入@Id变量?

SQL Server:使用原始exception编号的Rethrowexception

我在存储过程中使用TRY CATCH块,其中有两个INSERT指令。 如果出现问题,CATCH块会负责回滚所做的所有更改并且工作正常,除了一件事! 我的ASP.NET应用程序捕获的exception是一个数字为50000的SqlException。这不是原始数字! (我期待的数字是2627) 在exception的Message属性中,我可以看到原始的exception编号和格式化的消息。 我怎样才能获得原始的例外号码? try { // … code } catch (SqlException sqlException) { switch (sqlException.Number) { // Name already exists case 2627: throw new ItemTypeNameAlreadyExistsException(); // Some other error // As the exception number is 50000 it always ends here!!!!!! default: throw new ItemTypeException(); } } 现在,返回值已被使用。 我想我可以使用输出参数来获取exception编号,但这是个好主意吗? 我该怎么做才能获得例外号码? 谢谢 PS:这是必需的,因为我有两个INSERT指令。

ADO .NET与SQL Server Management Studio – ADO表现更差

我在ADO.NET C#和Sql Server Management工作室中运行相同的命令。 通过C#运行的SQL执行得更糟 – 内存使用情况更糟(耗尽所有可用内存),从而导致数据库执行时间增加。 管理工作室并不完美(它也会导致sql server耗尽内存),但它并不像通过ADO.NET那么糟糕。 我正在运行:Windows 7,Sql Server 2008 R2,10.50.1600。 C#.NET 3.5。 Sql Server管理Studio 2008 R2。 所有程序和数据库都在我的本地开发机器上。 我正在运行的SQL是40个创建视图,40个在2个数据库上创建唯一索引。 我需要动态执行此操作,因为我们正在运行两个数据库之间的数据库比较(出于不相关的原因,我们需要比较视图而不是表格)。 由于性能是一个问题,我们不能一直留下视图和索引。 SQL看起来像这样: create view [dbo].[view_datacompare_2011106] with schemabinding as ( SELECT t.[ID], t.[Column1], t.[Column2], t.[Column3], FROM dbo.Table t WHERE t.[ID] in (‘1′,’2′,’3′,’4’) ) go create unique clustered index [index_datacompare_2011106] on [dbo].[view_datacompare_2011106] (ID) go […]