Tag: sql

使用C#连接到SQL Server 2012数据库(Visual Studio 2012)

晚上好, 我正在尝试从C#连接到SQL Server 2012数据库。 使用SQL Server Management Studio时的连接设置如下: – Server Type: Database Engine Server Name: Paul-PC\SQLEXPRESS Authentication: Windows Authentication Username: Greyed out Password: Greyed out 我正在尝试连接的数据库的名称是“testDB”。 这是我的代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.SqlClient; namespace DatabaseConnection { public partial class Form1 : […]

LinqToSQL足够强大吗? 是不是更强大但同样流畅的界面易于构建?

在上一个问题中,我询问ORM库是否是次优解决方案并获得了很多很好的反馈。 正如我对这个问题的进一步思考,我得出的结论是LinqToSQL(现在)的主要好处和LinqToEntities(未来)的承诺在于它们能够减少程序代码和SQL之间的“不匹配”。 鉴于LinqToSQL作为一种完整的数据查询语言的局限性,我不倾向于认为它的优势远不止于此,但我想了解其他人的意见。 首先,程序代码和SQL之间的“不匹配”是什么意思? 如果您曾经开发过数据库应用程序,那么您可能已经熟悉(并且厌倦)与数据库交互所需的步骤:设置所有参数,输入SQL命令,然后将预期结果手动转换回变量或代码中使用的实例。 通过使用“流畅”接口,lambda表达式,扩展方法等,LinqToSql使这变得更加容易。最终结果是,很容易将本机C#标量类型推送到数据检索调用中,并且很容易自动生成本机C#类实例。 以MS网站为例: var q = from c in db.Customers where c.City == “London” select c; foreach (var cust in q) Console.WriteLine(“id = {0}, City = {1}”,cust.CustomerID, cust.City); 很酷! 那么问题是什么? 好吧,正如我在顶部链接的文章中指出的那样,存在许多问题。 对我来说最大的一点是,任何能够在SQL方面做到最低限度的人都会立即遇到障碍。 不仅仅是因为SQL的替代品而创建的许多构造都不熟悉甚至是笨拙的(Group By?我们在LinqToSql中谈论丑陋 )。 更大的问题是有许多常见的构造本身不受支持(例如DateDiff)。 充其量,您可以将Linq的“逃出”并将SQL代码提交到Linq调用流中。 那么,简单地在C#(或VB)中嵌入SQL是不是更好,这种方式允许您自由地声明SQL,但是这也可以让您轻松参数嵌入并自动转换为本机类? 例如,如果我们在一个类中只实现六个函数,我们可以编写类似这样的东西(其中qry是我们的查询类的一个实例): var ListOfEnrollees = qry.Command(“Select b.FirstName, b.LastName, b.ID From ClassEnroll a inner join […]

允许用户传递表名和列名,同时防止SQL注入

我有一个(Intranet)网页(ASP.NET C#),它允许用户在SQL-Server中的特定数据库上创建一个表,表名和列名是自由文本字段,实际结构由几个确定下拉菜单。 我知道传递create table语句是因为纯文本字符串与我的文本框中的文本连接在一起容易受到SQL注入的影响。 鉴于我传递的是不存在的db对象的实际名称而不是参数,除了在连接字符串之前检查每个文本框是否包含非法字符之外,还有什么方法可以防止注入的可能性?

使用SqlCommand.Parameters进行C#更新表ASP.NET

可能重复: C#使用SqlCommand.Parameters更新表 我正在尝试使用SqlCommand更新SQL Server表,我认为这是我的T-SQL的语法错误,但这是我到目前为止: SqlCommand sqlCmd = new SqlCommand( “UPDATE yak_tickets SET email = @emailParam, subject = @subjectParam, text = @textParam, statusid = @statusIDParam, ticketClass = @ticketClassParam WHERE id = @ticketIDParam”, sqlConn); 这些参数正常工作,但是,当我运行代码时,表永远不会更新。 任何帮助将不胜感激=) 这是代码的其余部分: #region Parameters /* Parameters */ sqlCmd.Parameters.Add(“@ticketIDParam”, SqlDbType.BigInt); sqlCmd.Parameters[“@ticketIDParam”].Value = ticketID; sqlCmd.Parameters.Add(“@emailParam”, SqlDbType.NVarChar); sqlCmd.Parameters[“@emailParam”].Value = ticketToBeSubmitted.getEmail(); sqlCmd.Parameters.Add(“@subjectParam”, SqlDbType.NVarChar); sqlCmd.Parameters[“@subjectParam”].Value = ticketToBeSubmitted.getSubject(); […]

使用LINQ从选择中排除列

我正在使用Entity Framework Code First开发WCF RESTful Web服务。 我有一个表有很多列的Users 。 我这样做是为了得到一个特定的用户: context.Configuration.ProxyCreationEnabled = false; var users = from u in context.Users where u.UserId == userId select u; 在此表上,有一个密码列,我不想返回此列。 如何从该选择中排除密码列?

DotNet.Highcharts:未按正确日期绘制成本

我正在创建一个使用两个表中的数据的DotNet.Highcharts图表:支出和收入。 我正在使用SQL语句为每个语句创建一个DataTable 。 第一个(用于Incomings)称为Dt包含IncCost和IncDate 。 名为Dt2的第二个(支出)包含ExpCost和ExpCost 。 我可以针对IncDate绘制针对IncDate和ExpCost 。 当我尝试连接IncDate和IncDate (最终)时出现问题,因为IncCost和ExpCost的成本是针对(最终)中日期的位置绘制的,而不是与其相关的实际日期。 以下是我用来创建每个DataTable的调用: SqlDataAdapter Adp = new SqlDataAdapter(“select CONVERT(DATETIME, IncDate, 103) AS IncDate, SUM(IncCost) AS IncCost from Incomings GROUP BY CONVERT(DATETIME, IncDate, 103) ORDER BY CONVERT(DATETIME, IncDate, 103)”, con); SqlDataAdapter Adp2 = new SqlDataAdapter(“select CONVERT(DATETIME, ExpDate, 103) AS ExpDate, SUM(ExpCost) AS ExpCost from Expenditures GROUP BY […]

指数超出范围。 必须是非负数且小于集合的大小

编译网格视图以显示一组订单时,我得到索引超出范围exception。 添加新行时不会发生这种情况,但是当我尝试删除或更新行时确实会发生这种情况。 任何帮助深表感谢。 设计师是: <asp:TextBox ID="txtOrderID" runat="server" Text='’> <asp:Label ID="Label1" runat="server" Text='’> <asp:TextBox ID="txtDate" runat="server" Text='’> <asp:Label ID="Label2" runat="server" Text='’> <asp:TextBox ID="txtOrderTaker" runat="server" Text='’> <asp:Label ID="Label3" runat="server" Text='’> <asp:TextBox ID="txtOrderBy" runat="server" Text='’> <asp:Label ID="Label4" runat="server" Text='’> <asp:TextBox ID="txtMaterial" runat="server" Text='’> <asp:Label ID="Label5" runat="server" Text='’> <asp:TextBox ID="txtTint" runat="server" Text='’> <asp:Label ID="Label6" runat="server" Text='’> <asp:TextBox ID="txtBCOR" runat="server" […]

Linq-to-Sql:递归获取子项

我有一个Comment表,它有一个CommentID和一个ParentCommentID。 我想获得评论中所有孩子的清单。 这是我到目前为止,我还没有测试过。 private List searchedCommentIDs = new List(); // searchedCommentIDs is a list of already yielded comments stored // so that malformed data does not result in an infinite loop. public IEnumerable GetReplies(int commentID) { var db = new DataClassesDataContext(); var replies = db.Comments .Where(c => c.ParentCommentID == commentID && !searchedCommentIDs.Contains(commentID)); foreach (Comment reply […]

从SqlCommand对象发送什么SQL

我在基于c#的asp.net页面上有一个SqlCommand对象。 SQL和传递的参数大部分时间都在工作。 我有一个案例无效,我收到以下错误: 字符串或二进制数据将被截断。 该语句已终止。 我理解错误,但数据库中的所有列都应足够长,以容纳所有发送的内容。 我的问题, 有没有办法看到发送到数据库的实际SQL是从SqlCommand对象? 我希望能够在发生错误时通过电子邮件发送SQL。 谢谢,贾斯汀

有没有办法以编程方式执行包含实际执行计划的查询,并查看是否有任何索引建议

我有很多查询,我想在sql server management studio上使用Include Actual Execution Planfunction测试每个查询 但是,对于1m +查询,我不可能手动执行此操作 所以我想我可以通过编程(从c#)执行包含实际执行计划function,并查看SQL服务器是否建议任何索引