问题描述
|
因此,我尝试传递点字符串的参数,我的数据库中所有列均标记为非空,但是当我尝试运行以下代码时,它告诉我列Lat不能为空。我有什么要注意的吗?
string latParameter = \"\'Point(\" + latString + \")\'\";
string lonParameter = \"\'Point(\" + lonString + \")\'\";
string MysqLfinishedProcessing = \" insert into zipcodes \" +
\"set zipcode = \'\" + zipcodeString + \"\'\" +
\",State = \'\" + StateString + \"\'\" +
\",City = \'\" + CityString + \"\'\" +
\",lat = GeomFromText(@latParam)\"+
\",lon = GeomFromText(@lonParam)\"+
\",StateCode = \'\" + StateCodeString2 + \"\'\";
//File.AppendAllText(@\"C:\\sqlupdater.txt\",MysqLfinishedProcessing + \";\\n\");
MysqLConnection configCON = new MysqLConnection(sqlStringClass.zipCONString);
MysqLCommand CounterLogs = new MysqLCommand(MysqLfinishedProcessing,configCON);
CounterLogs.Parameters.Add(new MysqLParameter(\"@latParam\",latParameter));
CounterLogs.Parameters.Add(new MysqLParameter(\"@lonParam\",lonParameter));
configCON.open();
CounterLogs.ExecuteNonQuery();
configCON.Close();
是的,latString和lonString具有值。
字符串latParameter = \'Point(40.92233)\'
字符串lonParameter = \'Point(-72.63708)\'
好吧,这似乎是因为只有一个点的引用,我更改了字符串latParameter = \'Point(40.92233 12)\',这很好。但是我真的想同时将纬度/经度都放在1点列中吗?
没关系,在MysqL Edit中可以正常工作,但是在C#中,它仍然无法解决问题。问题是字符串lonParameter需要包含一个;
这是正确的代码。
string latParameter = \"Point(\" + latString + \" \" +lonString+\");\";
string MysqLfinishedProcessing = \" insert into zipcodes \" +
\"set zipcode = \'\" + zipcodeString + \"\'\" +
\",Location = GeomFromText(@latParam)\"+
\",latParameter));
configCON.open();
CounterLogs.ExecuteNonQuery();
configCON.Close();
解决方法
您正在使用错误的语法编写插入语句。一定是
string mySQLfinishedProcessing = \" insert into zipcodes(zipcode,State,City,lat,lon,StateCode ) values ( \" +
\"\'\" + zipcodeString + \"\'\" +
\",\'\" + StateString + \"\'\" +
\",\'\" + CityString + \"\'\" +
\",GeomFromText(@latParam)\" +
\",GeomFromText(@lonParam)\" +
\",\'\" + StateCodeString2 + \"\')\";
, 如果GeomFromText是db函数,则无论您传入什么内容,它都可能返回null。