在asp.net上插入语句不插入mysql表

时间:2011-08-22 14:25:09

标签: c# asp.net mysql

我正在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);

    }


}

1 个答案:

答案 0 :(得分:0)

我假设您希望我们调试的查询是带有where子句的查询。

请在为cmd创建新odbc命令的行处设置断点。你需要检查'deptselected'的值。

或者,您可以调试SQL语句并将其复制粘贴到SQL查询UI中。请自行运行选择。我认为它不会返回任何行,因为您的表中不存在“deptselected”或“deptselected”为空。

另外,两个好的编程指针: -

1)。使用参数化SQL语句而不是将值附加到字符串中。您的代码容易受到SQL注入攻击。这真是太糟了。

2)。 'deptselected'已经是一个字符串,你不需要'ToString'了。

希望这会有所帮助。

编辑: - 我刚看了上面的评论。在该表上执行select *(star),并在someother_column = another_value中获取您感兴趣的同一行。检查department部分列的字符串长度。检查字符串开头或之后是否有空格。