【问题标题】:DB table not being seen by web serviceWeb服务看不到数据库表
【发布时间】:2013-12-04 11:53:39
【问题描述】:

我正在使用asmx 网络服务将用户在网站上输入的数据输入到我的数据库中名为Booking 的表中。

我已确保该表存在于我正在使用的架构中,并且我已经测试了我的连接字符串并且它工作正常。但是,每次我运行该服务时,它似乎都看不到有问题的表,并且浏览器给了我这个错误:

System.Data.SqlClient.SqlException:对象名称“Booking”无效。

调试后说问题出在第 31 行

第 31 行:ws.addBooking(name, email, restaurant, add1, add2, add3, 县, 电话, 信息);

这是与该行相关的完整代码:

protected void Button1_Click(object sender, EventArgs e)
    {

        //Get info
        String name = TextBox1.Text.ToString();
        String email = TextBox2.Text.ToString();
        String restaurant = TextBox3.Text.ToString();
        String add1 = TextBox4.Text.ToString();
        String add2 = TextBox5.Text.ToString();
        String add3 = TextBox6.Text.ToString();
        String tel = TextBox7.Text.ToString();
        String county = DropDownList1.Text.ToString();
        String info = TextArea1.Text.ToString();

        //Call web service
        Customers ws = new Customers();
        //Pass in parameters
        ws.addBooking(name, email, restaurant, add1, add2, add3, county, tel, info);
    }

这是被调用的网络方法addBooking

public void addBooking(String n, String e, String r, String a1, String a2, String a3, String c, String t, String i)
    {
        string sql = "INSERT INTO Booking VALUES(@n, @e, @r, @t, @c, @i, @a1, @a2, @a3)";
        using (var conn = new SqlConnection("Data Source=localhost\\SQLEXPRESS;AttachDbFilename=C:\\Users\\n00093500\\Desktop\\MMCA2\\APP_DATA\\NORTHWIND.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"))
        using (var cmd = new SqlCommand(sql, conn))
        {
            cmd.Parameters.Add("@n", SqlDbType.VarChar, 50).Value = n;//name
            cmd.Parameters.Add("@e", SqlDbType.VarChar, 50).Value = e;//email
            cmd.Parameters.Add("@r", SqlDbType.VarChar, 50).Value = r;//restaurant
            cmd.Parameters.Add("@t", SqlDbType.VarChar, 50).Value = t;//telephone
            cmd.Parameters.Add("@c", SqlDbType.VarChar, 50).Value = c;//county
            cmd.Parameters.Add("@i", SqlDbType.VarChar, 1000).Value = i;//info
            cmd.Parameters.Add("@a1", SqlDbType.VarChar, 50).Value = a1;//address
            cmd.Parameters.Add("@a2", SqlDbType.VarChar, 50).Value = a2;//address
            cmd.Parameters.Add("@a3", SqlDbType.VarChar, 50).Value = a3;//address
            conn.Open();
            cmd.ExecuteNonQuery();
        }
    }

谁能帮我破译可能导致此问题的原因?

尝试在 Visual Studio 2010 中使用 server explorer 运行此查询...

INSERT INTO Booking(name, email, restaurant, telephone, county, info, add1, add2, add3)
VALUES(John Doe,johndoe@hotmail.com,Johns Restaurant, 1234567,Dublin,Test info,4,Main street,Kinsale)

得到这个错误

Doe 附近的语法不正确

【问题讨论】:

  • 您的连接使用集成安全性,这意味着它具有不同的权限,具体取决于用户帐户。检查用于启动 Web 服务的帐户。它必须与您的权限相同。
  • 而且...字符串值必须用引号引起来

标签: asp.net sql-server web-services


【解决方案1】:

尝试在 Insert 语句中写 dbo.Booking 而不是 Booking

string sql = "INSERT INTO dbo.Booking VALUES(@n, @e, @r, @t, @c, @i, @a1, @a2, @a3)";

【讨论】:

  • 刚刚尝试了您的建议,但在运行时仍然遇到相同的错误
  • NORTHWIND.dbo.Booking?
  • 再一次,没有变化。我只是不明白可能是什么问题!
【解决方案2】:

确保在正确的数据库中运行 INSERT 语句。 Initial Catalog(默认数据库)可能与您要使用的不同。

  1. 检查连接字符串,看看哪个数据库是默认数据库。
  2. 使用 SQL Server Management Studio 连接到数据库并针对 Booking 运行 SELECT 查询以检查您是否拥有所需的安全权限。
  3. 运行 SQL Profiler 以查看到底发生了什么。这将有助于您进一步调试。
  4. 如果您在同一台机器上运行多个数据库引擎,请确认您连接到正确的实例MyComputerName\SqlServerInstanceName

【讨论】:

  • 检查了connection String,这很好,也可以在Booking表上运行SELECT查询,所以这不是权限问题。但是我似乎无法 INSERT 我不断收到一个错误,我将在上面发布
  • 在连接 SQL Server Management Studio 时,您是否也尝试过执行 INSERT 语句?也许你只有读权限。
  • 我应该提到大卫,我有另一种方法可以将数据插入到同一架构上的不同表中,并且可以正常工作而没有错误。所以我认为 READ 权限应该对 Booking 表有效,但我会检查只是装箱。
  • @Javacadabra,如果您能够使用相同的连接字符串运行其他 INSERT 语句,我相信 SQL Profiler 是您调试此问题的最佳朋友。
猜你喜欢
  • 2019-10-30
  • 2014-04-19
  • 2011-07-07
  • 1970-01-01
  • 2017-10-25
  • 2012-08-17
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多