2012-07-12 43 views
1

我有一個要求。在我的項目中,我需要存儲控制字符(ASCII字符範圍從0到31)。但在這裏我需要以角色的形式進行存儲。我寫了一個c代碼,但它不起作用。我在這裏發佈我寫的代碼。 我的IDE是Visual Studio 2010中,我使用MySQL插頭C 6.0.2如何通過C++代碼在MySQL DB中存儲控制字符?

 #include "stdafx.h" 
    #include <iostream> 
    #include <string> 
    #include<my_global.h> 
    #include <mysql.h> 

    using namespace std; 

    MYSQL* Connection, MySQL; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
int i; 
string sData; 
char SQLString[384]; 

for(i=0;i<=31;i++) 
    sData+=i; 

    char *Hostname="localhost", *Username="root", *Password="system123", *Database="file_data"; 

mysql_init(&MySQL); 
Connection = mysql_real_connect(&MySQL, Hostname, Username, Password, Database, 0, 0, 0); 

if (Connection == NULL) 
    exit(1); 

sprintf_s(SQLString,384,"set sql_mode='NO_BACKSLASH_ESCAPES';");  
mysql_query(Connection, SQLString); 

sprintf_s(SQLString,384,"insert into file_values(first_data)values('%s')",sData.c_str()); 
mysql_query(Connection, SQLString); 
    return 0; 
    } 

這裏,編寫實際的項目代碼之前,我寫了一個示例應用程序來測試它是能夠存儲或沒有,但通過使用上面的代碼,我無法將控制字符存儲在file_values表的first_data列中。

first_data的數據類型是大小爲varchar 33

PLZ讓我知道我需要在上面的代碼做acheive我的要求的變化。

謝謝你的一切。

+0

也許blob字段可以幫助你,它的目的是存儲二進制數據。 – aisbaa 2012-07-12 14:52:44

回答

0

您應該爲此準備好語句,而不是試圖將字符代碼嵌入到字符串中。你也可能更好地使用blob數據類型而不是字符串。

這裏有一個如何使用準備好的聲明中存儲一個blob的(未經測試)例如:

MYSQL_STMT* statement = mysql_stmt_init(Connection); 
std::string statementStr = "insert into file_values(first_data) values (?)"; 
mysql_stmt_prepare(&statement, statementStr.c_str(), statementStr.length()); 

MYSQL_BIND parameter; 

parameter[0].buffer_type= MYSQL_TYPE_BLOB; 
parameter[0].buffer= (char*)sData.c_str(); 
parameter[0].is_null= 0; 
parameter[0].length= sData.length(); 
mysql_stmt_bind_param(statement, &parameter); 

mysql_stmt_execute(stmt); 
mysql_stmt_close(statement); 

另外,如果你需要堅持使用列類型爲varchar你很可能只是代替上述的buffer_type與MYSQL_TYPE_STRING