Tag: sql server

如何在C#.NET(SQL Server)中正确有效地重用预准备语句?

我看了很多问题,但显然我的SO-fu不能胜任这个任务,所以我在这里。 我正在尝试有效地使用预准备语句,我不仅仅意味着参数化单个语句,而是编译一个语句以便重复使用多次。 我的问题在于参数和重用以及如何正确实现。 一般来说,我遵循这个程序(人为的例子): SqlConnection db = new SqlConnection(…); SqlCommand s = new SqlCommand(“select * from foo where a=@a”, db); s.Parameters.Add(“@a”, SqlDbType.VarChar, 8); s.Prepare(); … s.Parameters[“@a”] = “bozo”; s.Execute(); 超级,有效。 但是,每次运行此查询时,我都不想执行所有这些步骤(或后四个步骤)。 这似乎抵消了准备陈述的整个想法。 在我看来,我只需要更改参数并重新执行,但问题是如何做到这一点? 我尝试了s.Parameters.Clear() ,但这实际上删除了参数本身,而不仅仅是值,所以我基本上需要重新Add参数并重新Prepare ,这似乎也打破了整点。 不用了,谢谢。 在这一点上,我留下了迭代s.Parameters并将它们全部设置为null或其他值。 它是否正确? 不幸的是,在我目前的项目中,我有~15个参数的查询需要执行〜每次运行10,000次。 我可以将这个迭代分流成一个方法但是想知道是否有更好的方法来做到这一点(没有存储过程)。 我目前的解决方法是一个扩展方法, SqlParameterCollection.Nullify ,它将所有参数设置为null,这对我的情况很好。 我只是在执行后运行它。 我发现了一些几乎完全相同但(恕我直言)尚未解答的问题: 准备语句和.NET中的内置连接池 SQLite / C#连接池和准备语句混淆 (Serge非常接近回答!) 我能找到的最佳答案是(1)上面的常识和(2)这个页面: http://msdn.microsoft.com/en-us/magazine/cc163799.aspx

在Linq中使用排序规则到Sql

想象一下这个SQL查询 select * from products order by name collate Persian_100_CI_AI asc 现在使用Linq: product = DB.Products.OrderBy(p => p.name); // what should I do here? 我该如何应用整理?

缺省值(C#变量)LINQ to SQL Update中的问题

我有以下代码用于使用LINQ to SQL更新Account表。 AccountNumber是主键列。 需要更新的唯一值是AccountType; 但是,持续时间也会更新为零(int的默认值)。 我们怎样才能避免这种不必要的覆盖呢? 注意:我使用的是Attach方法 注意:我理解这种行为的原因。 “DataContext无法区分分配值为零的字段和仅仅未分配的字段。” 我正在寻找解决方案来解决这个问题。 [global::System.Data.Linq.Mapping.ColumnAttribute(Storage=”_Duration”, DbType=”Int NOT NULL” public int Duration 表数据 表结构: CREATE TABLE [dbo].[Account]( [AccountNumber] [int] NOT NULL, [AccountType] [nchar](10) NOT NULL, [Duration] [int] NOT NULL, [DepositedAmount] [int] NULL, CONSTRAINT [PK_Account] PRIMARY KEY CLUSTERED ( [AccountNumber] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = […]

无法找到我的EF代码第一个数据库

我在做微软的MVC入门教程: entity framework6入门代码首先使用MVC 5。 这包括创建代码优先数据库。 一切正常,但我无法找到我的数据库。 这是我的ConnectionString : 如果我调试我的索引方法连接如下: Data Source=.\SQLEXPRESS; Integrated Security=True 但是我的SQLEXPRESS实例中没有数据库,我已经使用SQL Server Management Studio进行了检查。 如果我在文件系统中搜索*.mdf我也找不到任何东西。 我项目中的App_Data为空… 但是所有CRUD操作都运行良好,必须有一些东西。 我可以看到该表的唯一方法是通过Visual Studio Server Explorer连接到.\SQLEXPRESS 。 但这位于何处? 如果我通过SQL Server Management Studio连接到.\SQLEXPRESS ,为什么我看不到该表? 任何的想法?

SqlCommand的输入输出参数

我有SqlCommand的以下参数。 如何进入和退出存储过程的参数值。 SqlCommand mySqlCommand = new SqlCommand(“aspInsertZipCode”, mySqlConnection); mySqlCommand.CommandType = CommandType.StoredProcedure; mySqlCommand.Parameters.Add(“@DataRows”, dataStringToProcess.ToString());

将文本框文本转换为整数

我需要将我的xaml代码的文本框中的文本转换为C#中的整数值。 我正在使用.NET 4.0和Visual Studio 2010.有没有办法在xaml标签本身或者我需要在C sharp中编写转换器。 我尝试了以下但是没有工作: Convert.ToInt32(this.txtboxname.Text) 任何帮助深表感谢。 谢谢。

数据没有插入表格?

我的表名是Customer 。 它有四列 CustomerId CustomerName CustomerAddress PhoneNo 这是我的c#代码。 我没有得到任何例外,数据没有插入数据库。 string connString = “Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\VictoryDatabase.mdf;Integrated Security=True;User Instance=True”; SqlConnection myConnection = new SqlConnection(connString); try { myConnection.Open(); string query = “insert into Customer(CustomerName,CustomerAddress,PhoneNo) values (@CustNm,’@CustAdd’,@Ph)”; SqlCommand myCommand = new SqlCommand(query,myConnection); myCommand.Parameters.AddWithValue(“CustNm”,Print[0].CustomerName); myCommand.Parameters.AddWithValue(“CustAdd”,Print[0].Address); myCommand.Parameters.AddWithValue(“Ph”,Print[0].Telephone); Console.WriteLine(Print[0].Telephone); myCommand.ExecuteNonQuery(); myConnection.Close(); } catch (Exception e) { Console.WriteLine(e.ToString()); }

如何将SqlException消息操作为用户友好消息

我想从UI上获取的错误消息中获取以下exception中的所有替换值,以显示自定义消息到粒度级别 UPDATE语句与FOREIGN KEY约束“FK_Parameter_Status”冲突。 冲突发生在数据库“LIMS”,表“dbo.Status”,列“StatusId”中。 %ls语句与%ls约束“%。* ls”冲突。 冲突发生在数据库“%。* ls”,表“%。* ls”%ls%。* ls%ls。 我可以观察 %ls正在被UPDATE , FOREIGN KEY等取代。 在C#中,我将收到错误消息,我想从中提取由SQL Server替换的部分。 我将在我的库中维护SqlErrors并将其替换为自定义消息。 我要显示的自定义消息,例如。 string.Format(“{0} failed!, incorrect value was supplied for {1} field”, “UPDATE”, “Status”)

在sql中查询数据字典的最佳方法

对于我正在设置的项目,我需要一个非常动态的数据结构。 我打算存储我没有定义的记录。 一条记录可能包含5列,另一条记录可能包含10列。 为了支持这一点,我想使用包含以下列的表: ResultId RecordId RecordTypeId键值 这支持所有可能的方案,但我做了几个问题。 这是最好的方法还是我错过了更好的选择? 什么是查询这个并以我们的方式获取我的记录的好方法? 我有定义存储在一个不同的表中,告诉我每个记录类型存储哪些列。 我已经看到了需要动态构建的PIVOT语句,因为你需要以数组样式提供字段(尽管我可以通过存储过程提供) 如何保持大量记录的表现? 使用像EF / Linq这样的东西是否方便? 这将使用SQL2008R2 Express后端在.NET 4,C#中编​​码。 我正在寻找一些最佳实践。 更新! 为了澄清一点:我需要存储来自不同的,未知的查询的数据的结果集。 我不知道将会有多少查询定义或它们的外观。 此数据库中的数据仅用于处理。 用户甚至不知道这些表存在,没有输入,也不会有任何报告或任何数据以任何方式击中屏幕。 结果集用于通过代码与其他结果集进行比较。 我需要的是一种高度动态的方式来存储这些记录,这些记录在涉及大量记录时仍然可以执行。 我想到的另一个选择是: ResultId RecordId field1(sql_variant)field2(sql_variant)field3(sql_variant)field4(sql_variant)… 这是一个更好的主意吗?

在SQL Server中动态创建SQL vs参数

如果我要从表中选择一行,我基本上有两个选项,或者像这样 int key = some_number_derived_from_a_dropdown_or_whatever SqlCommand cmd = new SqlCommand(“select * from table where primary_key = ” + key.ToString()); 或使用参数 SqlCommand cmd = new SqlCommand(“select * from table where primary_key = @pk”); SqlParameter param = new SqlParameter(); param.ParameterName = “@pk”; param.Value = some_number_derived_from_a_dropdown_or_whatever; cmd.Parameters.Add(param); 现在,我知道第一种方法因为可能的sql注入攻击而不受欢迎,但在这种情况下,参数是一个整数,因此不应该真正注入恶意代码。 我的问题是:您是否在生产代码中使用选项1,因为您认为使用安全是因为易于使用和控制插入的参数(如上所述,或者参数是否在代码中创建)? 或者你总是使用参数,不管是什么? 参数100%注射安全吗?