下面是我的表截图:
插入后的数据
C#中的代码
SqlConnection con = new SqlConnection(connectionsession.Con);
con.Open();
SqlCommand cmd = new SqlCommand("finalinsert", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@fid", SqlDbType.Int)).Value = flightsession.Sflightid;
cmd.Parameters.Add(new SqlParameter("@fcid", SqlDbType.Int)).Value = flightsession.Sflightcostid;
cmd.Parameters.Add(new SqlParameter("@ftid", SqlDbType.Int)).Value = flightsession.Sflighttimingid;
cmd.Parameters.Add(new SqlParameter("@frdn", SqlDbType.Date)).Value = DateTime.Now.ToString("dd-MM-yyyy");
cmd.Parameters.Add(new SqlParameter("@ford", SqlDbType.Date)).Value = flightsession.Regdate;
cmd.Parameters.Add(new SqlParameter("@uid", SqlDbType.Int)).Value = loginsession.Auser;
cmd.Parameters.Add(new SqlParameter("@paid", SqlDbType.Int)).Value = "1";
cmd.Parameters.Add(new SqlParameter("@source", SqlDbType.VarChar)).Value = flightsession.Sscource;
cmd.Parameters.Add(new SqlParameter("@destination", SqlDbType.VarChar)).Value = flightsession.Sdestination;
cmd.Parameters.Add(new SqlParameter("@fn", SqlDbType.VarChar)).Value = flightsession.Sflightname;
cmd.Parameters.Add(new SqlParameter("@fc", SqlDbType.VarChar)).Value = flightsession.Total;
cmd.Parameters.Add(new SqlParameter("@fty", SqlDbType.VarChar)).Value = flightsession.Stype;
cmd.Parameters.Add(new SqlParameter("@fcl", SqlDbType.VarChar)).Value = flightsession.Sflightclass;
cmd.Parameters.Add(new SqlParameter("@ft", SqlDbType.Time)).Value =flightsession.Sflighttime;
cmd.ExecuteNonQuery();
MessageBox.Show("Succesful");
con.Close();
flightreceipt ob18 = new flightreceipt();
ob18.ShowDialog();
this.Hide();
在SQL Server 2008中创建过程的代码
ALTER procedure [dbo].[finalinsert] @fid int,@fcid int,@ftid int,@frdn date,@ford date,@uid int,
@paid int,@source varchar,@destination varchar,@fc varchar,@fty varchar,@fcl varchar,@ft time(7) ,@fn varchar
AS
INSERT INTO [shangrila].[dbo].[flight_reg_table]
([flight_id]
,[flight_cost_id]
,[flight_time_id]
,[flight_reg_date_now]
,[flight_on_reg_date]
,[user_id]
,[paid]
,[source]
,[destination]
,[flight_name]
,[flight_cost]
,[flight_type]
,[flight_class]
,[flight_time])
VALUES
(@fid,
@fcid,
@ftid,
@frdn,
@ford,
@uid,
@paid,
@source,
@destination,
@fn,
@fc,
@fty,
@fcl,
@ft)
我试图找出原因!但我被卡住了。 记住我插入的所有格式都是字符串。 感谢。
答案 0 :(得分:25)
在您的sproc中,您的VARCHAR需要具有与之关联的长度,例如VARCHAR(50)
。默认长度为1,因此SQL只向您的sproc发送一个字符。
ALTER procedure [dbo].[finalinsert] @fid int ,@fcid int ,@ftid int ,@frdn date ,@ford date ,@uid int ,@paid int ,@source varchar(50) ,@destination varchar(50) ,@fc varchar(50) ,@fty varchar(50) ,@fcl varchar(50) ,@ft time(7) ,@fn varchar(50) AS
您可能还需要更改调用中的数据类型以包含长度,但ADO.NET 可能正确处理它。
答案 1 :(得分:3)
@Talljoe以及@Jethro提到了根本原因。
无论如何,如果看起来像这样,你的C#代码会更好:
using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand cmd = connection.CreateCommand())
{
cmd.CommandText = commandName;
cmd.CommandType = CommandType.StoredProcedure;
...
cmd.Parameters.Add("@source", SqlDbType.VarChar, 50).Value = flightsession.Sscource;
cmd.Parameters.Add("@destination", SqlDbType.VarChar, 50).Value = flightsession.Sdestination;
cmd.Parameters.Add("@fn", SqlDbType.VarChar, 40).Value = flightsession.Sflightname;
cmd.Parameters.Add("@fc", SqlDbType.VarChar, 50).Value = flightsession.Total;
cmd.Parameters.Add("@fty", SqlDbType.VarChar, 50).Value = flightsession.Stype;
cmd.Parameters.Add("@fcl", SqlDbType.VarChar, 50).Value = flightsession.Sflightclass;
connection.Open(); // open just now!
cmd.ExecuteNonQuery();
} // using block call Dispose() for each object locker to guarantee close of the connection
答案 2 :(得分:0)
您的存储过程varchar需要更改以显示字段的长度。即@fn varchar(50)。
答案 3 :(得分:0)
除了变量的数据类型外,还应提及数据项的大小。例如:varchar(50)