我有一个名为“VehicleCamp”的存储过程,此存储过程将数据插入此表:
+---------------------+-----+-------------+--------------+-----------+-----------------+
| id_campaing_control | vin | campaing_id | id_workorder | id_client | campaing_status |
+---------------------+-----+-------------+--------------+-----------+-----------------+
| | | | | | |
+---------------------+-----+-------------+--------------+-----------+-----------------+
| | | | | | |
+---------------------+-----+-------------+--------------+-----------+-----------------+
这是存储过程的代码:
CREATE PROCEDURE VehicleCamp(
@vin VARCHAR(100), @id_camp int, @workorder varchar (100), @id_client int, @status varchar(64)
)
AS
BEGIN
SET NOCOUNT ON;
IF(@id_client IS NULL)
BEGIN
INSERT INTO vehicle_campaing (vin,campaing_id,id_workorder,campaing_status) values( @vin, @id_camp, @workorder, @status);
END
ELSE
BEGIN
INSERT INTO vehicle_campaing (vin,campaing_id,id_workorder,id_client,campaing_status) values( @vin, @id_camp, @workorder, @id_client, @status);
END
END
我需要在C#中执行这个存储过程,根据车辆数量,车辆可以是N个车辆。
我将车辆的VIN编号保存在ArrayList中,但我不知道如何执行存储过程N次以及如何将@vin参数分配给ArrayList中的每个元素。
这是我的C#代码:
public void insertVinCamp()
{
string connetionString = null;
connetionString = "Server=.\\SQLEXPRESS;Database=recalls;Integrated Security=true";
SqlConnection cnn = new SqlConnection(connetionString);
SqlCommand sqlc = cnn.CreateCommand();
sqlc.CommandType = CommandType.StoredProcedure;
sqlc.CommandText = "VehicleCamp";
String workorder = label11.Text + folio.Text + year.Text;
String status = "PENDING";
sqlc.Parameters.Add("@vin", SqlDbType.VarChar, 100).Value = //here need the values of the arraylist
sqlc.Parameters.Add("@id_camp", SqlDbType.Int).Value = Int32.Parse(camp.Text);
sqlc.Parameters.Add("@workorder", SqlDbType.VarChar, 100).Value = workorder;
sqlc.Parameters.Add("@id_client", SqlDbType.VarChar, 64).Value = label4.Text;
sqlc.Parameters.Add("@status", SqlDbType.VarChar, 64).Value = status;
try
{
cnn.Open();
sqlc.ExecuteNonQuery();
cnn.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error!");
}
}
不要害怕问你需要什么。
答案 0 :(得分:1)
如果您的数据访问代码没有直接从您的UI中读取字段,这将更容易。
首先你可以创建一个这样的类:
public class VehicleCamp
{
public string Vin {get;set;}
public int IdCamp {get;set;}
public string WorkOrder {get;set;}
public string IdClient {get;set;}
public string Statis {get;set;}
}
最好有一个单独的类来插入记录,以便每个类都有一个责任。但是现在你可以修改你的方法:
public void InsertVinCamp(VehicleCamp vinCamp) // guessing at names
{
...
现在,您的InsertVinCamp
方法正在从传递给它的参数中获取其值。它不是从UI领域读取的。这样每种方法只需做一件事。一种方法从表单中读取值。另一种方法不知道值的来源 - 它只是插入传递给它的内容。
现在,您可以为要插入的每条记录构建VehicleCamp
的实例。
var vc = new VehicleCamp
{
IdCamp = Int32.Parse(camp.Text),
WorkOrder = label11.Text + folio.Text + year.Text,
// etc.
}
如果你有一个VIN列表,你可以这样做(我使用的是List
而不是ArrayList
。)
public void InsertVehicleWithMultipleVins(VehicleCamp vehicle, List<string> vins)
{
foreach(var vin in vins)
{
vehicle.Vin = vin;
InsertVinCamp(vehicle);
}
}