簡體   English   中英

SQL多條語句,INSERT不起作用

[英]SQL multiple statements, INSERT not working

我正在開發一個Web應用程序,並且遇到了問題。 當有人嘗試(成功或失敗)登錄時,我需要在SQL數據庫表“ log”中插入用戶名和ip地址。 ID,時間和日期會自動插入...由於某種原因,我無法在我的登錄表單中使用它。 如果我從另一種形式啟動INSERT語句,則可以正常工作,但無法使其與用於檢查登錄憑據的SELECT語句一起使用。

我嘗試了不同的解決方案,但是沒有一個將數據插入表中……它不會引發錯誤,只是不會在“ log”表中插入新行。

任何幫助表示贊賞。 :)

protected void btnLog_Click(object sender, EventArgs e)
{
    using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["dbConn"].ToString()))
    {
        string username = null;
        string password = null;
        string ipAddress = null;

        SymCryptography cryptic = new SymCryptography();
        SqlCommand cmdSelect = new SqlCommand();
        SqlCommand cmdLog = new SqlCommand();
        SqlDataReader myReader = null;

        cmdSelect.Connection = conn;
        cmdLog.Connection = conn;

        cmdSelect.CommandText = "SELECT * FROM uporabniki WHERE up_ime=@up_ime AND geslo=@geslo";
        cmdSelect.CommandType = CommandType.Text;
        cmdLog.CommandText = "INSERT INTO log (up_ime, ip) VALUES (@up_ime, @ip)";
        cmdLog.CommandType = CommandType.Text;

        cmdSelect.Parameters.Add("@up_ime", SqlDbType.NVarChar, 20).Value = tbUsr.Text;
        cmdSelect.Parameters.Add("@geslo", SqlDbType.NVarChar, 20).Value = cryptic.Encrypt(tbPwd.Text);
        cmdLog.Parameters.Add("@up_ime", SqlDbType.NVarChar, 20).Value = tbUsr.Text;
        cmdLog.Parameters.Add("@ip", SqlDbType.NVarChar, 20).Value = ipAddress;

        conn.Open();
        try
        {
            //cmdLog.ExecuteNonQuery();  I tried it here, but it doesn't work
            myReader = cmdSelect.ExecuteReader();
            if (myReader.Read())
            {
                username = myReader["up_ime"].ToString();
                password = myReader["geslo"].ToString();
                Session["rights"] = myReader["pravice"];
                Session["login"] = "OK";
                pravice = true;
            }
            myReader.Close();
            //cmdLog.ExecuteNonQuery();  I tried it here, but it doesn't work
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
        conn.Close();
    }
    //I tried to open connection again, but stil INSERT does not work
    /* using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["dbConn"].ToString()))
    {
        string ipAddress = null;
        SqlCommand cmdLog = new SqlCommand();
        cmdLog.Connection = conn;
        cmdLog.CommandText = "INSERT INTO log (up_ime, ip) VALUES (@up_ime, @ip)";
        cmdLog.CommandType = CommandType.Text;
        cmdLog.Parameters.Add("@up_ime", SqlDbType.NVarChar, 20).Value = tbUsr.Text;
        cmdLog.Parameters.Add("@ip", SqlDbType.NVarChar, 20).Value = ipAddress;
        conn.Open();
        try
        {
            cmdLog.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
        conn.Close();
    }

    if (pravice == true)
    {
        Response.Redirect("Default.aspx");
    }
    else
    {
        Response.Redirect("Login.aspx");
    }*/ 
}

您沒有執行您的cmdLog.ExecuteNonQuery(); 聲明。

另外,嘗試在sql數據庫中打開查詢窗口,然后對它運行以下命令。

INSERT INTO log (up_ime, ip) VALUES (<some time>, <test ip text>)

如果錯誤出在sql server上,則應返回一條錯誤消息,指出問題出在SQL Server。

也嘗試更改:

    cmdLog.Parameters.Add("@up_ime", SqlDbType.NVarChar, 20).Value = tbUsr.Text;
    cmdLog.Parameters.Add("@ip", SqlDbType.NVarChar, 20).Value = ipAddress;

至:

  cmdLog.Parameters.Add("@up_ime", tbUsr.Text);
  cmdLog.Parameters.Add("@ip",  ipAddress);

檢查您的連接字符串值是否正確。 同時在以下位置設置一個斷點:

   conn.Open();

看看您是否收到錯誤消息? 如果不是,則表示您的連接字符串正常。

嘗試后取消注釋此行{}

 //cmdLog.ExecuteNonQuery();  I tried it here, but it doesn't work

並在其上放置一個斷點..看看是否收到錯誤?

同樣從您的代碼中,我可以看到您正在向表中插入一個空ipaddress值。 看看數據庫中的列是否允許接受空值?

using語句將清理垃圾回收過程中的連接,該連接在不確定的時間發生。 這就是為什么您嘗試的執行順序之一不起作用(連接可能不可用)的原因。 建議您執行以下任一操作:

  1. 1中的兩個操作都使用(connection),請確保您在finally()塊中關閉了連接,然后針對新的opeend連接重新初始化命令。

  2. 具有2個不同的連接conn1和conn2,並在每個連接中執行單獨的操作。

編輯:我已經重新閱讀,並且您說沒有錯誤發生? -嘗試檢查ExecuteNonQuery的結果(它返回一個整數以顯示受影響的行數-如果該值為零,則insert語句存在問題)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM