必须声明标量变量@Id吗?

因此,我试图从数据库中获取“客户”,但出现异常

System.Data.dll中发生类型’System.Data.SqlClient.SqlException’的异常,但未在用户代码中处理

附加信息:必须声明标量变量"@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<Customer> GetCustomers()

{

return new List<Customer>();

}

}

}

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<Customer> GetCustomers();

}

}

回答:

您应该添加一个SqlParameter名称@Id

command.CommandText = "SELECT * FROM CUSTOMER WHERE Id = @Id;";

command.Parameters.Add("@Id", SqlDbType.Int32).Value = Id;

以上是 必须声明标量变量@Id吗? 的全部内容, 来源链接: utcz.com/qa/400624.html

回到顶部