[英]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
值并检查以确保它确实是您想要的值。
请使用参数化查询避免SQL注入并使用参数绑定您的值(这将使您的代码更具可读性和安全性)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.