SQL Server添加字符串值时的列名无效

Ham*_*boh 5 c# sql database asp.net web-services

我是SQL Server的新手

我创建了这样的表:

CREATE TABLE Accidents (
     Id INT NOT NULL PRIMARY KEY IDENTITY,
     GUID VARCHAR(100),
     Latitude VARCHAR(100),
     Longitude VARCHAR(100),
     PhotoName VARCHAR(100)        
     )
Run Code Online (Sandbox Code Playgroud)

我已经创建了一个Web服务来向该表插入数据,如下所示:

    SqlConnection con = new SqlConnection(@"workstation id=DatabaseSample.mssql.somee.com;packet size=4096;user id=???;pwd=???;data source=DatabaseSample.mssql.somee.com;persist security info=False;initial catalog=DatabaseSample");

    public string addAccidentToDatabase(string GUID, string imageBase64String, string latitude, string longitude, string photoName)
    {
        SqlCommand cmd = new SqlCommand("INSERT INTO Accidents (GUID,Latitude,Longitude,PhotoName) VALUES ("
            + GUID + "," + latitude + "," + longitude + "," + photoName + ")", con);

        try
        {
            con.Open();
            cmd.ExecuteNonQuery();
        }
        catch (Exception e)
        {
            return e.Message;
        }
        finally
        {
            con.Close();
        }

        return "succeeded";
    }
Run Code Online (Sandbox Code Playgroud)

所有这些东西托管到免费托管服务器.

当我从VS2010测试Web服务时,当我将数字传递给所有参数时,新行成功添加到表中.但是当我将至少一个字符串传递给服务时,例如"a",我得到了这个结果:

<string xmlns="http://tempuri.org/">Invalid column name 'a'.</string>
Run Code Online (Sandbox Code Playgroud)

并且没有添加行.我想知道他为什么把"a"视为专栏名称?有人可以帮忙吗?

Cod*_*ter 7

我想知道他为什么把"a"视为专栏名称?

这不难看出来.您不应该开发软件,部署它并希望它运行.你应该测试一下.将执行代码解压缩为类方法,并从您的服务中调用它.开发时,您可以从单元测试或命令行程序或任何您想要测试的方法调用此方法.

您的问题:在查询中不要在字符串(或varchars,如果需要)周围添加引号.如果您只是将查询字符串打印到控制台,您会看到它.

但老实说,这是你的问题中最少的.你不应该手工制作SQL.至少使用参数化查询.所以让你的查询是:

"INSERT INTO Accidents (GUID, Latitude, Longitude, PhotoName) 
                VALUES (@GUID, @Latitude, @Longitude, @PhotoName)"
Run Code Online (Sandbox Code Playgroud)

并绑定参数:

cmd.Parameters.AddWithValue("@GUID", GUID);
...
Run Code Online (Sandbox Code Playgroud)

  • 如果OP看起来不难,我怀疑会问这个问题.很棒的答案,但有点居高临下. (3认同)