SQL Server插入查询

本文关键字:查询 插入 Server SQL | 更新日期: 2023-09-27 18:27:01

我想知道为什么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_视觉工作室2010''PROJECTS''CLIENTPORTAL''APPLICATIONUI''WEBSITE''CLIENTPORTAL''APP_DATA''DATAUI.MDF",表"dbo.Groups",列"Id"。

我确实查过数据库,没有重复的Id或其他什么。。

你能帮我吗?

干杯。

SQL Server插入查询

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

查询字符串是动态类型的原因是什么?

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

为什么对查询字符串使用dynamic?这是一个字符串,定义为这样。

您还将自己设置为允许他人对您的网站进行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表,您可能会看到Group_Id上的FK约束指向GROUPS表。检查您尝试为param插入的值是否为Groups.Id 中的现有值

重复ID不是问题;您试图插入Groups_Folders的行被赋予了数据库中不存在的GroupId。看起来像

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

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

  1. 您正试图在数据库中插入父表中不存在的值。它是由于表上的外键约束而来的2

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