我正在asp.net上创建一个Web表单,允许最终用户将基于选定部门的多个用户分配到测验中。
数据库是mysql数据库,因为我使用joomla
mysql上的表是:jos_users_quizzes,包含以下列:
id
quiz_id
user_id
我有第二个名为叫
带有此列的jos_dhruprofile
id
name
username
department
我需要从所选部门中选择所有用户ID,并将这些ID插入user_quizzes表。
我有两个查询试图插入第一个具有选定部门的条件不起作用的查询 没有are语句的那个实际插入,我没有错误,只是插入没有去..
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);
}
}
答案 0 :(得分:0)
我假设您希望我们调试的查询是带有where子句的查询。
请在为cmd创建新odbc命令的行处设置断点。你需要检查'deptselected'的值。
或者,您可以调试SQL语句并将其复制粘贴到SQL查询UI中。请自行运行选择。我认为它不会返回任何行,因为您的表中不存在“deptselected”或“deptselected”为空。
另外,两个好的编程指针: -
1)。使用参数化SQL语句而不是将值附加到字符串中。您的代码容易受到SQL注入攻击。这真是太糟了。
2)。 'deptselected'已经是一个字符串,你不需要'ToString'了。
希望这会有所帮助。
编辑: - 我刚看了上面的评论。在该表上执行select *(star),并在someother_column = another_value中获取您感兴趣的同一行。检查department部分列的字符串长度。检查字符串开头或之后是否有空格。