Tag: sql server 2008

参数varbinary数据类型中的空值

如何在参数varbinary数据类型中添加空值? 当我执行以下代码时: using (SqlConnection myDatabaseConnection1 = new SqlConnection(myConnectionString.ConnectionString)) { using (SqlCommand mySqlCommand = new SqlCommand(“INSERT INTO Employee(EmpName, Image) Values(@EmpName, @Image)”, myDatabaseConnection1)) { mySqlCommand.Parameters.AddWithValue(“@EmpName”, textBoxEmpName.Text); mySqlCommand.Parameters.AddWithValue(“@Image”, DBNull.Value); myDatabaseConnection1.Open(); mySqlCommand.ExecuteNonQuery(); } } 我得到以下System.Data.SqlClient.SqlException : 不允许从数据类型nvarchar到varbinary(max)的隐式转换。 使用CONVERT函数运行此查询。

如何在存储过程中使用OUTPUT参数

我是编写存储过程的新手。 所以我用输出参数写了一个并且想要访问输出值,hot来做它。 我的存储过程: ALTER PROCEDURE selQuery ( @id int, @code varchar(50) OUTPUT ) AS SELECT RecItemCode = @code, RecUsername from Receipt where RecTransaction = @id RETURN @code 如果尝试将“@ code = RecItemCode”设置为获取错误:“为变量赋值的SELECT语句不得与Data Retrieval操作结合使用。” 我使用存储过程: con.Open(); cmd.Parameters.AddWithValue(“@id”, textBox1.Text); SqlParameter code = new SqlParameter(“@code”, SqlDbType.Int); code.Direction = ParameterDirection.Output; cmd.Parameters.Add(code); SqlDataReader sdr = cmd.ExecuteReader(); MessageBox.Show(cmd.Parameters[“@code”].Value.ToString()); // getting error con.Close(); […]

LINQ:仅当值不为null时才添加where子句

我知道一种典型的方式是这样的: IQueryable query = from staff in dataContext.Staffs; if(name1 != null) { query = from staff in query where (staff.name == name1); } 但是,从我们从其他开发人员手中接过的程序中,我们看到了这样的代码: IQueryable query = from staff in dataContext.Staffs; query = from staff in query where (name1 == null || staff.name == name1); 如果这是一个普通的SQL语句,我肯定会说第二个是不好的做法。 因为当name1为null时,它会向查询添加无意义的where子句。 但我是LINQ的新手,所以我不确定LINQ是否有所不同?

如何将数据从数据库显示到文本框中,并进行更新

我可以在从sql数据库中检索数据后在我的文本框,下拉列表中显示我的数据,但是当我继续我的更新按钮时,在文本框或下拉列表中编辑的信息将不会更新到数据库中。 我尝试删除页面加载中的代码,并手动重新键入所有数据,它可以更新。 我想要的只是从数据库中检索数据并将其显示在文本框中,并且可以在从文本框进行一些更改后更新到数据库中。 有人可以帮我吗? 谢谢。 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.SqlClient; using System.Configuration; using System.Data; public partial class UpdateCustomerDetails : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { SqlConnection con1 = new SqlConnection(“Data Source=USER-PC;Initial Catalog=webservice_database;Integrated Security=True”); DataTable dt = new DataTable(); con1.Open(); SqlDataReader myReader = null; […]

NHibernate.Spatial和Sql 2008地理类型 – 如何配置

我试图使用Nhibernate与Sql 2008地理类型,并有困难。 我正在使用Fluent Nhibernate来配置我相当新的,所以这也可能是问题。 首先,我试图坚持的课程看起来像: public class LocationLog : FluentNHibernate.Data.Entity { public virtual new int Id {get;set;} public virtual DateTime TimeStamp {get;set;} public virtual GisSharpBlog.NetTopologySuite.Geometries.Point Location {get;set;} } 映射类如下所示: public class LocationLogMap : ClassMap { ImportType(); Id(x => x.Id); Map(x => x.TimeStamp).Generated.Insert(); Map(x => x.Location); } 为了将MsSql2008GeographyDialect与Fluent Nhibernate一起使用,我创建了自己的配置类: public class Sql2008Configuration : PersistenceConfiguration { public […]

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指令。

如何在gridview中突出显示单词

如何在gridview控件中突出显示查询文本?

如何在sql语句中使用字符串变量

我有一个WPF应用程序,我得到了 string someone = TextBox.text; 我想在以下查询中使用它 query = ” Select * From Table Where Title = someone ” 我该如何在查询中使用变量?

在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 Management Studio中快速从C#运行时,SQL查询超时

我有一个C#程序,使用下面列出的代码执行SQL查询。 我已经使用这段代码一段时间没有问题,直到前几天。 我将查询字符串传递给SQL,其中包含一个字符串列表,这些字符串是库存标识符。 几天前我运行它,查询超时,如果我让它运行一个多小时。 我花了这么多天试图调试这个。 在我的原始查询中,大约有900个标识符。 我已经尝试过改变我能想到的一切,但我得到了无法解释的结果。 例如: 查询使用一个股票列表,但不能使用另一个字符串和总长度相同的长度列表 它适用于一个列表,但不能以相反的顺序使用相同的列表 有一个列表,如果有正好900个标识符,它可以工作,但如果有899或901则不行,我可以包含或排除不同的标识符并获得相同的结果,因此它不是一个标识符之一的时髦。 在每种情况下,我都捕获了我的程序传递的查询字符串并将其复制到SQL Server Management Studio中,并且在每种情况下,查询都会在1秒内运行。 我已经在这个和其他论坛上阅读了关于在SQL Server Management Studio中工作但在从程序运行时超时的所有内容,但这似乎有所不同,因为我可以找到失败的情况和类似的情况工作。 我希望看到我可能会看到可能发生的事情的建议。 using (SqlConnection conn = new SqlConnection(_connectString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand(queryString, conn)) { cmd.Parameters.Clear(); cmd.CommandTimeout = _timeout; SqlParameter param; if (parms != null) { foreach (string parm in parms.Keys) { param = […]