【问题标题】:System.Data.SqlClient.SqlException: Must declare the scalar variable "@LocationID". in MVCSystem.Data.SqlClient.SqlException:必须声明标量变量“@LocationID”。在 MVC 中
【发布时间】:2017-12-11 05:06:16
【问题描述】:

描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。

异常详细信息:System.Data.SqlClient.SqlException:必须声明 标量变量“@LocationID”。

来源错误:

第 43 行:第 44 行:conn.Open();第 45 行:
适配器。填充(dt);第 46 行:conn.Close();第 47 行:

源文件:C:\Users\Dev D\Documents\Visual Studio 2015\Projects\MySafar\MySafar\Models\DBUtility.cs 行:45

Location.cs(模型类)

public class Location
{
        public int LocationID;
        public string LocationName;
        public string PhotoPath;
        public string Details;
        public string CityID;
}        

public int Update()
{
            string query = "UPDATE Location SET LocationName = @LocationName, PhotoPath = @PhotoPath, Details = @Details, CityID = @CityID WHERE LocationID = @LocationID";
            List<SqlParameter> parameters = new List<SqlParameter>();
            parameters.Add(new SqlParameter("@LocationID", this.LocationID));
            parameters.Add(new SqlParameter("@LocationName", this.LocationName));
            parameters.Add(new SqlParameter("@PhotoPath", this.PhotoPath));
            parameters.Add(new SqlParameter("@Details", this.Details));
            parameters.Add(new SqlParameter("@CityID", this.CityID));

            return DBUtility.ModifyData(query, parameters);
}

public bool SelectByPK()
{
            string query = "SELECT * FROM Location WHERE LocationID = @LocationID";
            List<SqlParameter> parameters = new List<SqlParameter>();
            parameters.Add(new SqlParameter("@LocationID", this.LocationID));

            DataTable dt = DBUtility.SelectData(query, parameters);

            if (dt.Rows.Count > 0)
            {
                this.LocationName = dt.Rows[0]["LocationName"].ToString();
                this.PhotoPath = dt.Rows[0]["PhotoPath"].ToString();
                this.Details = dt.Rows[0]["Details"].ToString();
                //this.CityID = Convert.ToInt32(dt.Rows[0]["CityID"]);
                this.CityID = dt.Rows[0]["CityID"].ToString();

                return true;
            }
            else
            {
                return false;
            }
        }
}

AdminController 中的查看方法

public ActionResult Location_Edit()
{
            Location l = new Location();
            l.LocationID = Convert.ToInt32(Request.QueryString["ID"]);
            l.SelectByPK();

            return View(l)
}

[HttpPost]
public ActionResult Location_List_Edit()
{
            Location l = new Location();
            l.LocationID = Convert.ToInt32(Request.QueryString["ID"]);
            l.LocationName = Request.Form["LocationName"];
            l.PhotoPath = Request.Form["PhotoPath"];
            l.Details = Request.Form["
            l.CityID = Request.Form["CityID"];

            l.Update();

            return View("Location_List", new DataTable());
}

DBUtility.cs(模型类定义用于修改插入和选择数据的数据库方法)

public static DataTable SelectData(String query, List<SqlParameter> parameter)
{
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=\"C:\\Users\\Dev D\\Documents\\Visual Studio 2015\\Projects\\MySafar\\MySafar\\App_Data\\MySafarDB.mdf\";Integrated Security=True";

            SqlCommand command = new SqlCommand();
            command.Connection = conn;

            command.CommandText = query;

            DataTable dt = new DataTable();
            SqlDataAdapter adapter = new SqlDataAdapter();
            adapter.SelectCommand = command;

            conn.Open();
            adapter.Fill(dt);
            conn.Close();

            return dt;
}

【问题讨论】:

    标签: c# datatable


    【解决方案1】:

    这个方法有问题

    public static DataTable SelectData(String query, List<SqlParameter> parameter)
    

    您在这里传递了List&lt;SqlParameter&gt; parameter,但没有将其添加到command 参数列表中。

    这就是它给你错误的原因。添加参数如下,在你的方法中添加这行代码。

    foreach( var param in  List<SqlParameter> parameter))
      command.Parameters.Add(param);
    

    【讨论】:

    • 像这样?? SqlCommand 命令 = 新 SqlCommand();命令.连接=连接; foreach( var param in List parameter)) command.Parameters.Add(param); command.CommandText = 查询;数据表 dt = 新数据表(); SqlDataAdapter 适配器 = new SqlDataAdapter();适配器.SelectCommand = 命令; conn.Open();适配器。填充(dt); conn.Close();返回 dt; }
    猜你喜欢
    • 1970-01-01
    • 2021-11-28
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    相关资源
    最近更新 更多