2010-06-05 45 views
4

我在C#中有一個.NET Wndows應用程序。這是一個使用MySql 5.1數據庫社區版的簡單Windows應用程序。我已經下載了MySql ODBC驅動程序,並在我的本地機器上爲我的數據庫創建了一個dsn。在我的應用程序中,我可以毫無問題地執行get類型查詢,但是當我執行給定的insert語句時(不是我嘗試做其他任何操作),我得到以下錯誤:來自MySql ODBC 5.1驅動程序在插入語句的C#應用​​程序中的內存分配錯誤

{「ERROR [HY001] [ MySQL] [ODBC 5.1驅動程序] [mysqld-5.0.27-community-nt]內存分配錯誤「}

我在Windows XP計算機上運行。我的機器有1 GB的內存。 任何人有任何想法?見下面

OdbcConnection MyConn = DBConnection.getDBConnection(); 
    int result = -1; 
    try 
    { 
     MyConn.Open(); 
     OdbcCommand myCmd = new OdbcCommand(); 
     myCmd.Connection = MyConn; 
     myCmd.CommandType = CommandType.Text; 
     OdbcParameter userName = new OdbcParameter("@UserName", u.UserName); 
     OdbcParameter password = new OdbcParameter("@Password", u.Password); 
     OdbcParameter firstName = new OdbcParameter("@FirstName", u.FirstName); 
     OdbcParameter LastName = new OdbcParameter("@LastName", u.LastName); 
     OdbcParameter sex = new OdbcParameter("@sex", u.Sex); 
     myCmd.Parameters.Add(userName); 
     myCmd.Parameters.Add(password); 
     myCmd.Parameters.Add(firstName); 
     myCmd.Parameters.Add(LastName); 
     myCmd.Parameters.Add(sex); 
     myCmd.CommandText = mySqlQueries.insertChatUser; 
     result = myCmd.ExecuteNonQuery(); 
    } 
    catch (Exception e) 
    { 
      //{"ERROR [HY001] [MySQL][ODBC 5.1 Driver][mysqld-5.0.27-community-nt]Memory 
      // allocation error"} EXCEPTION ALWAYS THROWN HERE 
    } 
    finally 
    { 
     try 
     { 
      if (MyConn != null) MyConn.Close(); 
     } 
     finally { } 
    } 

回答

9

,這是因爲有些字段接受空,我讓他們通過爲空,他們應該爲DBNull.Value傳遞代碼。對於所有允許空的字段應該檢查爲空,如果發現空,則應該傳遞DBNull.Value。

2

只是爲了完整起見,Chinjoo的SQL語句可能會是這樣的:??

mySqlQueries.insertChatUser =「插入ChatUsers(用戶名,密碼,名字,姓氏,性別)值(,, ?,);?「;

這被稱爲參數化插入,其中每個問號代表他的一個參數。在這個簡單的例子中,代碼中參數集合中參數的順序必須與SQL語句中列名的順序相匹配。

而不是使用功能較少的優雅,他的空問題的解決將是這個樣子,他的參數之一:

OdbcParameter姓氏=新OdbcParameter(「@名字」,u.LastName);

被替換

//如果值是 「空」 返回的DBNull,否則只值 OdbcParameter姓氏=新OdbcParameter( 「@名字」, (u.LastName == NULL)?系統.DBNull.Value:(object)u.LastName);

至少在我的代碼中(稍有不同),需要內部轉換爲類型對象,否則編譯器不確定?:運算符應該返回什麼類型。

希望這有助於人誰是相對較新的參數等

隱含在所有Chinjoo沒有批評 - 他發帖幫我出去!只是以爲我會分享經驗不足的人。我絕不是專家,所以把我所說的一切都用一粒鹽來說。

相關問題