在asp.net上插入语句,而不是在mysql表上插入语句
本文关键字:插入 语句 mysql asp net | 更新日期: 2023-09-27 18:06:15
我正在asp.net上创建一个web表单,允许最终用户根据选定的部门分配多个用户进行测验。
数据库是mysql数据库,因为我使用joomla
mysql上的表是:jos_users_quizzes,包含以下列:
id
quiz_id
user_id
我有第二个叫做
jos_dhruprofile包含这些列
id
name
username
department
我需要选择所选部门的所有用户id,并将这些id插入user_quizzes表中。
我有两个查询试图插入第一个,其中有选择的部门的条件不工作,而没有were语句的那个实际上插入了,我没有得到任何错误,只是插入没有…
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"的值。
或者,您可以调试。编写SQL语句并将其复制粘贴到SQL查询UI中。请单独运行select。我认为它不会返回任何行,因为要么'deptselected'不存在于你的表或'deptselected'是空的。
还有两个很好的编程指针:-
1)。使用参数化SQL语句,而不是将值附加到字符串中。您的代码容易受到SQL注入攻击。这是非常糟糕的。
2)。'deptselected'已经是一个字符串,你不需要再'ToString'它。
希望这对你有帮助。
编辑:-我刚刚读了上面的评论。在该表上执行select *(*),其中someother_column = another_value获取您感兴趣的同一行。检查部门列的字符串长度。检查字符串的开头或后面是否有空格。