繁体   English   中英

SQL Server插入查询

[英]SQL Server Insert query

我想知道为什么我在SqlDataReader reader2 = theCommandInsert.ExecuteReader();上遇到异常SqlDataReader reader2 = theCommandInsert.ExecuteReader();

这是我使用的代码:

var conString = ConfigurationManager.ConnectionStrings["LocalSqlServer"];
string strConnString = conString.ConnectionString;

SqlConnection dbConnection = new SqlConnection(strConnString);

dynamic queryString = ("INSERT INTO FOLDERS (Name) VALUES ('" + txtBoxFolderLabel.Text + "' ) ");

int param = CheckBoxList2.SelectedIndex;
param = param + 1;

dynamic queryStringInsert = ("INSERT INTO GROUPS_FOLDERS (Folder_Id, Group_Id) VALUES(IDENT_CURRENT('Folders') , " + param + " )");
SqlCommand theCommand = new SqlCommand(queryString, dbConnection);
SqlCommand theCommandInsert = new SqlCommand(queryStringInsert, dbConnection);

//Connection opening and executing
if (string.IsNullOrEmpty(txtBoxFolderLabel.Text) | CheckBoxList2.SelectedIndex.ToString() == null)
{
   Response.Write("Empty fields !");
}
else if (Functions.IsNumeric(txtBoxFolderLabel.Text))
{
   Response.Write("No numerics !");
}
else
{
   dbConnection.Open();
   SqlDataReader reader = theCommand.ExecuteReader();

   string folderName = txtBoxFolderLabel.Text;

   // Create folder 
   System.IO.Directory.CreateDirectory("C://inetpub//wwwroot//Files//" + folderName);

   dbConnection.Close();

   dbConnection.Open();
   SqlDataReader reader2 = theCommandInsert.ExecuteReader();
   dbConnection.Close();

这是我得到的例外:

INSERT语句与FOREIGN KEY约束“ FK_GROUPS_FOLDERS_Groups”冲突。 在数据库“ 9B15719DF48C3E2301D7F965674A6F93_VISUAL STUDIO 2010 \\ PROJECTS \\ CLIENTPORTAL \\ APPLICATIONUI \\ WEBSITE \\ CLIENTPORTAL \\ APP_DATA \\ DATAUI.MDF”的表“ dbo.Groups”的“ Id”列中发生了冲突。

我确实检查了数据库,没有重复的ID或其他内容..

请问你能帮帮我吗 ?

干杯。

您有遭受SQL注入攻击的风险。 您需要使用参数来传递文本框中的值,而不仅仅是连接字符串。

您的查询字符串是动态类型吗?

问题出在外键冲突,而不是主键或唯一性冲突。 看来您的外键FK_GROUPS_FOLDERS_Groups不允许复制您要插入的两个字段之一。

它不是在讨论重复的ID,而是在讨论外键约束。 建议您查看GROUPS_FOLDERS表,并且可能会看到指向Groups表的Group_Id受到FK约束。 检查您要为param插入的值是否是Groups.Id中的现有值

为什么要对查询字符串使用动态? 这是一个字符串,就这样定义它。

您还正在设置自己,以允许某人对您的网站执行SQL注入攻击。

string queryString = ("INSERT INTO FOLDERS (Name) VALUES ('" + txtBoxFolderLabel.Text + "' ) ");

这不是一个好主意,您应该使用Sql参数。

string queryString = ("INSERT INTO FOLDERS (Name) VALUES (@folder) ");

您可以在创建命令后定义参数

theCommand.Parameters.AddWithValue("@folder", txtBoxFolderLabel.Text);

至于您的特定错误,看来您在该表上定义了一个外键,而您不满足该外键的要求

重复的ID没问题; 您要插入Groups_Folders的行被赋予一个数据库中不存在的GroupId。 看起来像

int param = CheckBoxList2.SelectedIndex;
param = param + 1;

实际上没有正确生成所需的GroupId。 尝试查看param值并检查以确保它确实是您想要的值。

  1. 您正在尝试在父表中不存在的数据库中插入一个值。 这是由于表2上的外键约束所致。

请使用参数化查询避免SQL注入并使用参数绑定您的值(这将使您的代码更具可读性和安全性)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM