Tag: sql

SQL脚本数据中的关键字在以编程方式执行时导致问题 – C#

我是sql的新手,我的sql脚本中的关键字问题导致了严重问题。 我正在尝试在C#中执行premade .sql脚本文件列表。 我正在将文件读取为字符串并使用command.ExecuteNonQuery()执行它。 这适用于大多数脚本,但我遇到了一个无意中包含关键字的脚本: INSERT INTO [thetable] SELECT ‘123123’, ‘abcabc’, ‘I WANT TO GO TO BED’ UNION ALL SELECT ‘123124’, ‘abcdef’, ‘SOOO TIRED’ 基本上,当它命中GO时命令失败。 我负责创建这些插入文件,所以如果我需要以某种方式重新格式化它们,那么这是可能的; 但是,它们中的数据是不可协商的。 此外,由于我从一个有很多行的文件加载它们,所以参数化以避免这些东西似乎也不可行。 在这一点上,将非常感谢任何帮助。 非常感谢! 编辑添加信息: 为了澄清,实际字符串更像是’ASVFDS4 + 23eF3da34sddsdf3d3t4g … 100charslater … sd5OAyGOsiISIssdsd / sNUIGsdisd354f’。 当我尝试执行命令时,我捕获了exception,其中说: “Unclosed quotation mark after character string ‘ASVFDS4+23eF3da34sddsdf3d3t4g…100charslater…sd5OAy’ 注意,GOOAIS紧跟着5OAy,这让我相信GO实际上被读作命令,导致它在该命令之前期望结束字符串。 运行.NET 3.5 编辑2我也应该澄清,我目前正在拆分实际的GO语句并单独执行命令。 即 USE MyDatabase […]

如何将列名和表名作为参数传递给存储过程在SQL Server中?

我有一个存储过程,它将列名和表名作为参数。 ALTER PROCEDURE [dbo].[usp_TableReporting_GetColumnNamesAndValues] @concatstring AS VARCHAR(100), @Tablename as VARCHAR(100) AS BEGIN SELECT @concatstring FROM @Tablename END 这个程序给我一个错误: 必须声明标量变量@TableName 虽然我已经宣布它在顶部。

在带有文本参数的存储过程中是否可以进行sql注入?

我在我的存储过程中使用这样的查询 SET @Statement = ‘SELECT Id,Title,Content,Status,ROW_NUMBER() OVER (ORDER BY ‘ + @Sort + ‘) AS StudentReport FROM YearBook WHERE ‘ + @Criteria + ‘) AS ArticleNumber WHERE StudentReport> ‘ + CONVERT(NVARCHAR, @StartRowIndex) + ‘ AND StudentReport<= (' + CONVERT(NVARCHAR, @StartRowIndex + @MaximumRows); 只是想知道是否可以对这个存储过程进行sql注入。 如果是的话,我该如何预防呢? 需要帮忙 !!!

无法生成SQL Server的用户实例

我有一个本地项目,我试图从ASP:文本框输入数据到数据库。 在建设中我得到以下…… “ 无法生成SQL Server的用户实例。只有集成连接才能生成用户实例。连接将被关闭。 ” 我在这里有点困惑,我已经检查了数据库,并且它正在激活我正在尝试连接的凭据。 这是C#背后的代码 namespace OSQARv0._1 { public partial class new_questionnaire : System.Web.UI.Page { SqlDataAdapter da = new SqlDataAdapter(); SqlConnection sqlcon = new SqlConnection(@”user id=*myuserid*;”+”password=*mypassword*;”+”Data Source=mssql.dev-works.co.uk;User Instance=True;”+”Database=devworks_osqar”+”Trusted_Connection=true;”); protected void Page_Load(object sender, EventArgs e) { } protected void Create_Click(object sender, EventArgs e) { DataBinder ds = new DataBinder(); sqlcon.Open(); SqlCommand sqlcmd = […]

远程连接到SQL Server 2005实例时出现C#exception

尝试远程连接到SQL Server 2005实例,但获得以下exception: 建立与SQL Server的连接时发生与网络相关或特定于实例的错误。 服务器未找到或无法访问。 validation实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:SQL网络接口,错误:26 – 查找指定的服务器/实例时出错) 已检查并且服务器已启用以接受远程连接。 我在.NET中使用的连接字符串如下所示: Data Source=SERVERIP\INSTANCE;Initial Catalog=DATABASENAME;User Id=USERNAME;Password=PASSWORD; 有任何想法吗? 谢谢 :)

来自DB的分层数据 – 加入或不加入

我试图为这个问题找到一个干净,高效的解决方案,但不知怎的。 琐事: -ASP.Net C#应用程序(.Net 3.5) -MS-SQL Server 2005 这是数据的样子: 类别 – >模板 – >实例 类别可以包含多个模板。 模板可以包含多个实例。 这三个中的每一个都有一个类,还有一个包含大量列的相应数据库表。 我想从数据库中将完整的类加载到C#Category类对象中,包括所有相关的模板和实例对象。 我现在有两个选择: 1) 在所有3个表上进行连接并一次读取所有数据。 好处 :数据库方面更快,一个查询中的所有信息。 缺点 :我传输了大量冗余数据,因为每一行中每个实例都有相同的类别和模板数据。 示例(简化): CategoryID | CategoryName | TemplateID | TemplateName | InstanceID | InstanceName 1 | FirstCategory | 1 | FirstTemplate | 1 | FirstInstance 1 | FirstCategory | 1 | FirstTemplate […]

多个表中具有相同名称的列导致SubSonic Select出现问题

还有其他问题(至少有2个我见过它们)与此类似,但我无法使用它们来解决这个问题。 现在问题是:我有3个表,我只需从中选择4列。 我正在使用InnerJoin并且它工作得很好。 当我添加Where to this Select时,问题就开始了。 我在两个表中有一个名为“Name”的列。 如果我简单地添加 .Where(“Name”).Like(“A%”) 它说“……含糊不清的列名……” 如果我使用完全限定的列名(表格前缀为列名),则必须声明参数@TABLE_NAME SqlQuery sq = new Select(Tables.TableOne + “.” + TableOne.Columns.MemberId + ” AS MemberId”, Tables.TableTwo + “.” + TableTwo.Columns.Name + ” AS MemberName”, Tables.TableOne + “.” + TableOne.Columns.ExpiryOn + ” AS MembershipExpiresOn”, Tables.TableFour + “.” + TableFour.Columns.Name + ” AS Country”) .From(DAL.Tables.TableOne) .InnerJoin(Tables.TableTwo) .InnerJoin(Tables.TableThree) […]

我如何获得所有月份从日期formssql?

我有表名’payroll’和以下数据 month , pay January , 1200 March , 1500 December , 2000 我希望从存储过程的水晶报告中得到以下结果我想要一个显示此结果的SQL查询 Janury , 1200 February , 000 March , 1500 April , 000 May , 000 June , 000 July , 000 August , 000 September , 000 October , 000 November , 000 December , 2000 请帮忙进行查询。 提前致谢

使用SQL预处理语句将结果绑定到C#中

使用这个: SqlConnection myConnection = new SqlConnection(“Data Source=.\\SERVER;Initial Catalog=DB;Integrated Security=True;TrustServerCertificate=True;User Instance=False”); myConnection.Open(); SqlCommand myCommand = new SqlCommand(“SELECT BusinessName FROM Businessess WHERE BusinessID = @Param2”, myConnection); SqlParameter myParam2 = new SqlParameter(“@Param2”, SqlDbType.Int, 4); myParam2.Value = 1; myCommand.Parameters.Add(myParam2); MessageBox.Show(myCommand); //How do I bind results to show as string? 如何将预准备语句的结果绑定到变量,以便我可以操作它们?

为什么要使用SqlParameter 而不是嵌入参数?

我有一个sqlhelper类,包含一个重载的ExecuteNonQuery:一个只有一个参数(commandText),另一个有两个参数(commandText,SqlParameter [])。 假设我有一个没有用户交互的独立控制台应用程序,我将调用一个只更新一个包含3个参数的表的存储过程,如果我可以轻松地构建字符串,那么使用SqlParameter []有什么好处?只是将它作为commandText发送? 换句话说,为什么要使用以下内容: SqlParameter[] parameters = { new SqlParameter(“parm1” SqlDbType.VarChar, 3), new SqlParameter(“parm2”, SqlDbType.VarChar, 8), new SqlParameter(“parm3”, SqlDbType.VarChar, 2), new SqlParameter(“parm4”, SqlDbType.VarChar, 4) }; parameters[0].Value = p1; parameters[1].Value = p2; parameters[2].Value = p3; parameters[3].Value = p4; 当我可以使用这样的东西时: strQueryToRun = string.Format(“exec updateTable {0}, {1}, {2}, {3}”, p1, p2, p3, p4); 这是一个独立的控制台应用程序,因此不可能进行SQL注入。 谢谢。