必须声明标量变量@Id?

所以我试图从我的数据库中获取“客户”,但我得到了一个例外

System.Data.dll中出现“System.Data.SqlClient.SqlException”类型的exception,但未在用户代码中处理

附加信息:必须声明标量变量"@Id"

  using Core; using System; using System.Collections.Generic; using System.Configuration; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DatabaseAccess { public class DbCustomer { private string ConnectionString = ConfigurationManager.ConnectionStrings["local"].ConnectionString; private SqlConnection connection { get; set; } public DbCustomer() { connection = new SqlConnection(ConnectionString); } public Customer GetCustomer(int Id) { Customer customer = null; connection.Open(); using (SqlCommand command = connection.CreateCommand()) { command.CommandText = "SELECT * FROM CUSTOMER WHERE Id = @Id;"; var reader = command.ExecuteReader(); while (reader.Read()) { customer = new Customer(); customer.Id = reader.GetInt32(reader.GetOrdinal("Id")); customer.FirstName = reader.GetString(reader.GetOrdinal("FirstName")); customer.LastName = reader.GetString(reader.GetOrdinal("LastName")); customer.Address = reader.GetString(reader.GetOrdinal("Address")); } command.ExecuteNonQuery(); connection.Close(); } return customer; } } } using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; namespace Core { [DataContract] public class Customer { [DataMember] public int Id { get; set; } [DataMember] public string FirstName { get; set; } [DataMember] public string LastName { get; set; } [DataMember] public string Address { get; set; } [DataMember] public string Country { get; set; } [DataMember] public string PhoneNumber { get; set; } } } using Core; using DatabaseAccess; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BusinessLogic { public class CustomerController { public DbCustomer DbCustomer { get; set; } public CustomerController() { DbCustomer = new DbCustomer(); } public Customer GetCustomer(int Id) { return DbCustomer.GetCustomer(Id); } } } using BusinessLogic; using Core; using DatabaseAccess; using System.Collections.Generic; namespace WCF { // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in both code and config file together. public class CustomerService : ICustomerService { CustomerController CustomerController = new CustomerController(); public Customer GetCustomer(int Id) { return CustomerController.GetCustomer(Id); } public List GetCustomers() { return new List(); } } } using Core; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace WCF { // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together. [ServiceContract] public interface ICustomerService { [OperationContract] Customer GetCustomer(int Id); [OperationContract] List GetCustomers(); } } 

您应该添加名为@IdSqlParameter

 command.CommandText = "SELECT * FROM CUSTOMER WHERE Id = @Id;"; command.Parameters.Add("@Id", SqlDbType.Int32).Value = Id; 

你需要实际传入一个参数:

 command.CommandText = "SELECT * FROM CUSTOMER WHERE Id = @Id;"; command.Parameters.Add("@Id", SqlDbType.Int).Value = Id; var reader = command.ExecuteReader();