我有一个问题,我几天都无法解决。 我的简单代码(dll文件):
public static string RegisterUser(string table, string l, string p)
{
string query = "INSERT INTO " + table + "(login, password) VALUES ('" + l + "','" + p + "');";
return query;
}
一切正常,但是当我想写网络上收到的数据时,它不会返回完整的字符串,例如
string recieveStr = Encoding.UTF8.GetString(connection.Buffer); //received text: RegUser:nipercop:passwrd
string[] strArr = recieveStr.Split(':');
if (strArr[0].Equals("RegUser"))
{
// string p = strArr[2]; //passwrd
// sendStr = SqlCommands.RegisterUser("users",strArr[1], "passwrd");//works fine
sendStr = SqlCommands.RegisterUser("users",strArr[1], strArr[2]); // doesn't work
}
返回如下消息:
INSERT INTO users(mail, password) VALUES ('nipercop','passwrd
字符串丢失的结尾" ')"。没有错误,没有警告,没有任何东西。 我尝试在服务器上,在客户端上将编码更改为ASCII,但没有效果。
答案 0 :(得分:0)
尝试使用string.Format
:
string.Format(@"INSERT INTO {0}(login, password) VALUES ('{1}','{2}');", table, l, p);
理想情况下,您应该使用prepared SQL statements。原因是您插入的任何值都可能包含意外值,这会使您的代码容易受到SQL injection和其他许多不良内容的攻击。</ p>
例如,如果此处strArr[2]
包含"
,则会切断查询并导致错误。就目前而言,您的代码并没有考虑到这一点,而看似接受来自远程套接字的输入。这是你可能想要修改的东西。
答案 1 :(得分:0)
问题是从缓冲区读取字符串。
Encoding.UTF8.GetString(connection.Buffer,0 , bufferLength);
因为缓冲区长度是(例如)1024字节,而我的最后一个变量是其他变量长度的剩余部分的长度,即包含空符号(空格)。失败。