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注入攻击的风险。您需要使用参数来传递文本框中的值,而不仅仅是连接字符串。
查询字符串是动态类型的原因是什么?
问题在于外键冲突,而不是主键或唯一性冲突。看起来您的外键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
值并进行检查,以确保它确实是您想要的。
- 您正试图在数据库中插入父表中不存在的值。它是由于表上的外键约束而来的2
请使用参数化查询以避免SQL注入&使用参数来绑定您的值(这将使您的代码更可读&安全)