C# asp.net上的Insert语句未在mysql表上插入
我正在asp.net上创建一个web表单,允许最终用户根据选定的部门分配多个用户参加测验 数据库是mysql数据库,因为我使用了joomla mysql上的表是:jos_users_测验,包含以下列:C# asp.net上的Insert语句未在mysql表上插入,c#,asp.net,mysql,C#,Asp.net,Mysql,我正在asp.net上创建一个web表单,允许最终用户根据选定的部门分配多个用户参加测验 数据库是mysql数据库,因为我使用了joomla mysql上的表是:jos_users_测验,包含以下列: id quiz_id user_id 我有一个叫第二个的 jos_dhruprofile与此列 id name username department 我需要从所选部门选择所有用户id,并将这些id插入user_quizzes表 我有两个查询试图插入第一个查询,该查询具有所选部门的条件,
id
quiz_id
user_id
我有一个叫第二个的
jos_dhruprofile与此列
id
name
username
department
我需要从所选部门选择所有用户id,并将这些id插入user_quizzes表
我有两个查询试图插入第一个查询,该查询具有所选部门的条件,但在
没有WARE语句的那一个实际上是插入的,我没有得到任何错误,只是插入不成功
string quizidselected = DropDownList1.SelectedValue;
string deptselected = ListBox2.SelectedValue;
OdbcCommand cmd = new OdbcCommand("INSERT INTO jos_jquarks_users_quizzes (user_id, quiz_id) SELECT uid, ' " + quizidselected + " ' FROM jos_dhruprofile WHERE department = ' " + deptselected.ToString() + " '");
// OdbcCommand cmd = new OdbcCommand("INSERT INTO jos_jquarks_users_quizzes (user_id, quiz_id) SELECT uid, ' " + quizidselected + " ' FROM dhruprofile ");
提前感谢您查看我的代码
完整代码
要插入的源代码和ASP.NET表单
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Collections.Specialized;
using System.Text;
using System.Data;
using System.Data.Odbc;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
private void InsertRecords(StringCollection sc)
{
string ConnectionString = @"driver={MySQL ODBC 5.1 Driver};server=appdevelsvr;database=xxxx;uid=xx;pwd=xx;";
OdbcConnection conn = new OdbcConnection(ConnectionString);
try
{
conn.Open();
string quizidselected = DropDownList1.SelectedValue;
string deptselected = ListBox2.SelectedValue;
OdbcCommand cmd = new OdbcCommand("INSERT INTO jos_jquarks_users_quizzes (user_id, quiz_id) SELECT uid, ' " + quizidselected + " ' FROM jos_dhruprofile WHERE department = ' " + deptselected.ToString() + " '");
// OdbcCommand cmd = new OdbcCommand("INSERT INTO jos_jquarks_users_quizzes (user_id, quiz_id) SELECT uid, ' " + quizidselected + " ' FROM dhruprofile ");
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "Script", "alert('Records Successfuly Saved!');", true);
Response.Write(deptselected.ToString());
// Response.Write(sql.ToString());
}
catch (System.Data.SqlClient.SqlException ex)
{
string msg = "Insert Error:";
msg += ex.Message;
throw new Exception(msg);
}
finally
{
conn.Close();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
StringCollection sc = new StringCollection();
foreach (ListItem item in ListBox2.Items)
{
if (item.Selected)
{
sc.Add(item.Text);
}
}
InsertRecords(sc);
}
}
我假设您希望我们调试的查询是带有where子句的查询 请在为cmd创建新odbc命令的行上设置断点。您需要检查“deptselected”的值 或者,您可以debug.writeline该SQL语句并将其复制粘贴到SQL查询UI中。请自行运行select。我认为它不会返回任何行,因为您的表中不存在“deptselected”,或者“deptselected”为空 还有两个很好的编程指针:- 一,。使用参数化SQL语句,而不是将值追加到字符串中。您的代码容易受到SQL注入攻击。这很糟糕 二,“deptselected”已经是字符串,您不需要再次“ToString”它 希望这有帮助 编辑:-
我刚刚读了上面的评论。在该表上选择*星,其中其他某个列=另一个值,以获得您感兴趣的同一行。检查部门列的字符串长度。检查字符串开头或后面是否有空格 此语句字符串deptselected=ListBox2.SelectedValue中的值是多少。您是否尝试过使用where子句在Db上直接执行命令查询?我添加了php,因为我通过odbc发送的查询是到mysql数据库的,我知道mysql是为使用php而设计的,因此,meabe类似的故障排除技术可以处理我的代码/单独尝试select查询,看看它是否返回任何内容。@TonyR说mysql是为PHP设计的,就像说MSSQL是为VBA设计的一样。PHP碰巧有MySQL支持,但它不是设计用来支持它的。MySQL可以用C++、C、Python…和其他程序一样,它只是一个数据库存储引擎,PHP与MySQL几乎没有任何关系。有些东西是用字符串编写的,这不会从jos_dhruprofile返回任何SELECT*,其中department='it'哦,我发现了第一个缺陷,department值在某些情况下包含空格。。。像……这样使用安全吗?您可以尝试Trim:它的安全性取决于您的业务需求和该字段的长度。如果您可以保证“%IT%”永远不会与任何其他记录匹配,那么这可能会起作用。如果有人在该列中插入任何包含“IT”的单词,那么您的代码将中断。就个人而言,我会清理数据库并修复插入记录的应用程序中的错误。或者,如果无法更改插入记录的应用程序,则定期运行修剪这些记录的作业。