Tag: sql

获取错误:“在SQL中将数据类型nvarchar转换为数字时出错”

我将4个参数传递给asp.net Webservice。 这是我的代码到目前为止: WEBMETHOD: [ScriptMethod(ResponseFormat = ResponseFormat.Json)] [WebMethod] public List Raum(string RAUMKLASSE_ID, string STADT_ID, string GEBAEUDE_ID, string REGION_ID) { return RaumHelper.Raum(RAUMKLASSE_ID, STADT_ID, GEBAEUDE_ID, REGION_ID); } 助手类: public class RaumHelper { public class RAUM { public string RaumName { get; set; } public string RaumID { get; set; } } internal static List Raum( string RAUMKLASSE_ID, […]

DBNull检查ExecuteScalar

命令的存储过程可以返回null。是否正确检查返回值是否为null或者是否还要检查obj是否为null? object obj = command.ExecuteScalar(); int id = -1; if (DBNull.Value == obj) { id = Convert.ToInt32(obj ); }

必须声明标量变量“@UserName”

我一直收到一个我不明白的错误。 必须声明标量变量“@varname” 经过数小时的研究,尝试了多种解决方案而无需成功。 我的目标是创建一个使用2个文本框和一个按钮的登录页面,它根据存储在Sql数据库中的信息检查用户是否退出。 这是我认为问题来自的地方: private bool DBConnection(string userName, string password) { SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[“ConnectionString”].ConnectionString); //string cmdString = (“SELECT UserName, Password FROM Users WHERE UserName ='” + userName + // “‘AND Password ='” + password + “‘”); //REMOVED AS THIS IS PRONE TO SQL INJECTIONS string cmdString = (“SELECT * FROM Users WHERE […]

Linq-to-entities,在一个查询中获取结果+行数

我已经看到了关于这个问题的多个问题,但它们已经2年(或更长)了,所以我想知道是否有任何改变。 基本思想是填充gridview并创建自定义分页。 所以,我也需要结果和行数。 在SQL中,这将是这样的: SELECT COUNT(id), Id, Name… FROM … WHERE … 在一个简单的查询中获取所有内容。 但是,我想保持一致并使用Linq2Entities。 到目前为止,我使用的方法有两个查询(针对sql server),因为它只是起作用。 我想优化它,然后使用单个查询。 我试过这个: var query = from o in _db.Products select o; var prods = from o in query select new { Count = query.Count(), Products = query }; 这产生了一个非常讨厌和长的查询,真正不必要的交叉连接和其他我不需要或不想要的东西。 有没有办法在一个简单的查询中获取分页结果+所有实体的数量? 这里推荐的方法是什么? 更新: 刚试过FutureQueries,我做错了什么,或者它实际上执行了两个查询。 这显示了我的sql profiler: — Query #1 SELECT […]

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

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

sqldatetime溢出exceptionc#.NET

string con = ConfigurationManager.ConnectionStrings[“connectionString”].ConnectionString; SqlConnection cn = new SqlConnection(con); string insert_jobseeker = “INSERT INTO JobSeeker_Registration(Password,HintQuestion,Answer,Date)” + ” values (@Password,@HintQuestion,@Answer,@Date)”; SqlCommand cmd = new SqlCommand(); cmd.Connection = cn; cmd.CommandType = CommandType.Text; cmd.CommandText = insert_jobseeker; cmd.Parameters.Add(new SqlParameter(“@Password”, SqlDbType.VarChar, 50)); cmd.Parameters[“@Password”].Value = txtPassword.Text; cmd.Parameters.Add(new SqlParameter(“@HintQuestion”, SqlDbType.VarChar, 50)); cmd.Parameters[“@HintQuestion”].Value = ddlQuestion.Text; cmd.Parameters.Add(new SqlParameter(“@Answer”, SqlDbType.VarChar, 50)); cmd.Parameters[“@Answer”].Value = txtAnswer.Text; **cmd.Parameters.Add(new […]

为什么连接SQL字符串是一个坏主意?

我已经读过这样连接SQL字符串是个坏主意: cmd.CommandText = “Insert INTO workers Values (” + User.Identity.Name + “,” + WorkerName.Text + “,” + GetUniqueWorkerKey() + “);”; 所以推荐的方式是: cmd.CommandText = “Insert INTO workers Values (@Username, @WorkerName, @WorkerKey)”; cmd.Parameters.AddWithValue(“@Username”, User.Identity.Name); cmd.Paramters.AddWithValue(“@WorkerName”, TheWorkerNameYouPassedToThisMethod); 自从我读到它以来,我一直在避免连接SQL字符串,但我从未真正知道不这样做的理由。 AddWithValue()方法最终不会在场景后面执行相同的字符串连接吗? 也许该方法剥离特殊字符并将字符转换为html实体以防止sql注入,但我可以在连接我的SQL之前完成所有这些,我也得到相同的效果,不是吗? 或者是否有其他原因不练习SQL的字符串连接?

使用IQueryable创建动态查询

我正在尝试迭代字符串数组并动态创建IQueryable查询。 它很简单,但这里是我被困的地方 var query = context.QuestionsMetaDatas.AsQueryable(); var keywords=new List(){ “Test1″,”Test2” }; foreach(var key in keywords) { query=query.Where(a=>a.Text.Contains(key)); } 现在的问题是,当查询生成时,它编译为 select * from QuestionsMetaDatas where Text Like “Test1” AND Text Like “Test2” 而不是AND我希望查询生成OR …现在我该如何实现?

NHibernate的QueryOver语法可以选择SqlFunction的MAX()吗?

我在我的方言子类中注册了一个SQL函数 RegisterFunction(“addseconds”, new SQLFunctionTemplate(NHibernateUtil.Date, “dateadd(second, ?1, ?2)”)); 可以在这样的查询中使用 var q = _session.QueryOver() .Select( Projections.SqlFunction( “addseconds”, NHibernateUtil.Date, Projections.Property(x => x.DurationInSeconds), Projections.Property(x => x.StartTime))); 生成SQL SELECT dateadd(second, this_.DurationInSeconds, this_.StartTime) as y0_ FROM [Event] this_ 但我真正追求的是 SELECT MAX(dateadd(second, this_.DurationInSeconds, this_.StartTime)) as y0_ FROM [Event] this_ 不幸的是,我似乎无法让SelectMax采用Projections.SqlFunction。 可以吗?

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

我在将文件上传到数据库时遇到了一些问题。 我上传的表格具有以下结构: 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 = […]