C# 插入后,仅插入一个字符,即;“字符串”;在数据库中
下面是我的桌面截图: 插入后的数据 C代码# 用于在SQL server 2008中创建过程的代码C# 插入后,仅插入一个字符,即;“字符串”;在数据库中,c#,.net,sql-server,tsql,stored-procedures,C#,.net,Sql Server,Tsql,Stored Procedures,下面是我的桌面截图: 插入后的数据 C代码# 用于在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
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)
我试图找出原因!但是我被卡住了。
记住我插入的所有格式都是字符串。
谢谢。在存储过程中,您的VARCHAR需要有一个与其关联的长度,例如
VARCHAR(50)
。默认长度为1,因此SQL只向存储过程发送一个字符
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
更改过程[dbo]。[finalinsert]
@fid int
,@fcid int
,@ftid-int
,@frdn日期
福特日期
,@uid int
,@paid int
,@source varchar(50)
,@destination varchar(50)
,@fc varchar(50)
,@fty varchar(50)
,@fcl varchar(50)
,@ft时间(7)
,@fn varchar(50)
作为
您可能还需要更改调用中的数据类型以包含长度,但ADO.NET可能会正确处理它。根本原因由@Talljoe和@Jethro提及。 无论如何,如果您的C#代码看起来像这样,您的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
阅读有关和的更多信息。您的存储过程varchar需要更改以显示字段的长度。Ie@fn varchar(50)。除了变量的数据类型外,还应该提到数据项的大小。例如:varchar(50)-非常感谢:)我认为问题会得到解决,但在修改新错误后,无法将字符串转换为日期时间格式:(您可能只需要使用
DateTime.Now
而不是将其转换为字符串。但这是我的猜测,因为我不知道是哪个DateTime导致了问题。@abatishchev:-新错误现在出现,无法将字符串转换为日期时间。时间数据库中的格式(7)是09:00:00.0000000,我的字符串是09:00:00@pixelerator:在哪个列中?@abatishchev:-我首先找到了它,使用datetime.parse方法datetime dt=datetime.parse(flightsession.Sflighttime)将其转换为datetime;然后再次将其转换为字符串dt.ToString(“HH:mm:ss”);感谢您建议使用和处置方法:)@pixelerator:您是否尝试过使用SqlDbType.DateTime
而不使用ToString()
?@abatishchev:-我没有尝试,我会尝试:)
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