none
SQL敘述與使用者輸入變數值結合一個字串問題,新變數接受到值為NULL RRS feed

  • 問題

  • 請各位先進幫個忙,這是我在字串處理碰到一個SQL敘述與使用者輸入變數結合一個字串問題,以下是程式碼(C#),請各位先進指點一下吧。


    Code Snippet

    string conn = WebConfigurationManager.ConnectionStrings["energysaverConnectionString"].ConnectionString;
    MySqlConnection mycon = new MySqlConnection(conn);
    mycon.Open();

    MySqlCommand db =

      new MySqlCommand("INSERT utest(mint,mchar,flo) VALUES (?mint,?mchar,?flo)",mycon);
     //db.CommandText = conn;
         
    db.Parameters.Add("?mint", Int32.Parse(mint.Text));//mint.Text=1
    db.Parameters.Add("?mchar", mchar.Text);           //mchar.Text=test
    db.Parameters.Add("?flo", Convert.ToSingle(flo.Text));//flo.Text=1.0



    //c1只是測試該變數是否有被指派相關值 
    string c1 = "Create table tt  (pid int not null, name varchar(20),ping int )";

    //紅色這行是問題所在,已知mchar.Text得值為"test"但是整個字串無法指派至connCreatDb1 (connCreatDb1 為null)

    string connCreatDb1 = "Create table ' " + mchar.Text + " '(pid int not null, name varchar(20),ping int )";




    環境:

    os:win xp sp2 cht
    ide: vs2008 team suit cht
    asp.net2.0(C#)
    DB:mysql5.0.22




    2008年5月12日 上午 10:22

解答

  • 這個問題很奇怪,因為是不太可能發生的。看起來是很單純的字串指派,我寫了小小的程式是了一下是ok的。           

    Code Snippet

    string mchar = "test";
    string connCreatDb1 = "Create table ' " + mchar + " '(pid int not null, name varchar(20),ping int )";

     

    不過因為我平常使用的不是c#所以只能猜一下,是不是mchar造成的問題。一般說來,如果編譯上有問題,例如變數形態不符合字串相加的條件或是沒有宣告應該編譯器都不會過才是。

     

    另外,建議你把mchar.Text先拿掉,使用下面的句子試試:

    Code Snippet
    string connCreatDb1 = "Create table ' ";

     

     

    如果可以再慢慢拉長,我想你一定可以找出問題出在哪的。

    2008年5月14日 下午 11:30

所有回覆

  • 你是怎麼知道 connCreatDb1 是 NULL 值的?

    沒看到你有做什麼檢查啊?

     

    2008年5月12日 上午 10:25
    版主


  • 報告小朱大,我是用VS2008的"偵錯模式"+中斷點,出現的報告,SORRY造成你的誤解。
    2008年5月12日 上午 10:33
  • Code Snippet

    //c1只是測試該變數是否有被指派相關值 
    string c1 = "Create table tt  (pid int not null, name varchar(20),ping int )";

    //紅色這行是問題所在,已知mchar.Text得值為"test"但是整個字串無法指派至connCreatDb1 (connCreatDb1 為null)

    string connCreatDb1 = "Create table ' " + mchar.Text + " '(pid int not null, name varchar(20),ping int )";

     

    Console.Write(connCreatDb1); // 是空白還是有值?

     

     

    2008年5月12日 上午 10:37
    版主

  • connCreatDb1還是出現NULL,我還是試一下別的方法,很抱歉打擾您了。
    2008年5月13日 上午 02:21
  • 這個問題很奇怪,因為是不太可能發生的。看起來是很單純的字串指派,我寫了小小的程式是了一下是ok的。           

    Code Snippet

    string mchar = "test";
    string connCreatDb1 = "Create table ' " + mchar + " '(pid int not null, name varchar(20),ping int )";

     

    不過因為我平常使用的不是c#所以只能猜一下,是不是mchar造成的問題。一般說來,如果編譯上有問題,例如變數形態不符合字串相加的條件或是沒有宣告應該編譯器都不會過才是。

     

    另外,建議你把mchar.Text先拿掉,使用下面的句子試試:

    Code Snippet
    string connCreatDb1 = "Create table ' ";

     

     

    如果可以再慢慢拉長,我想你一定可以找出問題出在哪的。

    2008年5月14日 下午 11:30