我正在使用此代码检查'guid'表中是否已存在值(guid1):
string selectString = "SELECT guid" + "FROM trafficScotland" + "WHERE guid = " + guid1;
SqlCommand myCommand = new SqlCommand(selectString, myConnection);
String strResult = String.Empty;
strResult = (String)myCommand.ExecuteScalar();
if (strResult.Length == 0)
但是在
strResult = (String)myCommand.ExecuteScalar();
行,我收到sqlException错误
'guid'附近的语法
请告诉我这里有什么问题?
答案 0 :(得分:12)
"SELECT guid" + "FROM trafficScotland" + "WHERE guid ="
这是:
SELECT guidFROM trafficScotlandWHERE guid =
无论如何将它分解为单独的字符串是没有意义的,但是你在单词之间缺少空格:)
string resultGuidAsString = null;
// build command object
string cmdQuery = "SELECT guid FROM trafficScotland WHERE guid=@guid";
SqlCommand myCmd = new SqlCommand(cmdQuery, myConnection);
// safely pass in GUID parameter value
myCmd.Parameters.AddWithValue("@guid", guid1);
// read result, check for nulls in DB
object result = myCmd.ExecuteScalar();
if (result != DBNull.Value && result != null)
{
resultGuidAsString = result.ToString();
}
^^这是一个改进版本。如果我可以批评几点:
DBNull.Value
string
但正在处理Guid
s。奇数。答案 1 :(得分:6)
做这样的事情:
var selectString = "SELECT 1 FROM trafficScotland WHERE guid = @guid"
var myCommand = new SqlCommand(selectString, myConnection);
myCommand.Parameters.AddWithValue("@guid", guid1);
var itExists = (Int32)myCommand.ExecuteScalar() > 0;
if (itExists) {
// do stuff...
}
答案 2 :(得分:2)
selectString = "SELECT guid " + "FROM trafficScotland" + " WHERE guid = '" + guid1 +"'"
;
guid后注意空格
答案 3 :(得分:2)
每个人都告诉你问题是什么。是的,你的查询不正确。但是你未来的疑问呢?你怎么想看看他们是对的?
我强烈建议您使用 SQL Server Profiler 。 Profiler位于您的应用程序和数据库引擎之间,并掌握传递给数据库引擎的每个命令和查询。因此,您可以看到传递给SQL Server的内容,获取它,并尝试在SQL Server Management Studio中执行它以进行调试。
答案 4 :(得分:2)
理想情况下,您可以使用参数来防止SQL注入。他们还会处理诸如引用需要引用的值(如GUID)之类的内容:
var selectString = "SELECT guid FROM trafficScotland WHERE guid = @guid";
var myCommand = new SqlCommand(selectString, myConnection);
myCommand.Parameters.AddWithValue("@guid", guid1);
strResult = (String)myCommand.ExecuteScalar();
答案 5 :(得分:2)
首先,您必须修复间距,将一部分查询连接在一起,并且缺少重要的sql server关键字之间的空间。
选择guidFROM trafficScotlandWHERE guid
其次,您应该使用命名参数。这将有助于避免sql注入,这可以防止你不得不考虑是否需要单引号或不在你的sql变量周围。
var query = "SELECT guid FROM trafficScotland WHERE guid = @guid";
using(var command = new SqlCommand(query, connection))
{
command.Parameters.AddWithValue("@guid", guid1);
var result = command.ExecuteScalar();
// Compare guid1 to result
}
答案 6 :(得分:1)
如上所述,因为您忘记了一些空格,所以您正在运行以下查询
SELECT guidFROM trafficScotlandWHERE guid = {guid here}
正确的间距是首先要解决的问题。
答案 7 :(得分:1)
试试这个:
string selectString = "SELECT guid FROM trafficScotland WHERE guid = '" + guid1 + "'";
答案 8 :(得分:0)
空格+用其他人提到的“'”包围guid。您还应将GUIDs
存储为UNIQUEIDENTIFIERs
(假设为MSSQL)