2011-04-10 29 views
5

下面是我的表格截圖: Main table design插入後,只有一個字符數據庫中插入 「串」 的

數據後插入 Data after insertion

代碼在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) 

我試圖找出原因!但我卡住了。 記住我插入的所有格式都是字符串。 謝謝。

回答

23

在您的存儲過程中,您的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 

您可能還需要更改數據類型在你的電話,以及包括長度,但ADO.NET 可能正確處理它。

+0

-Thanks alot :)我認爲這個問題將被解決,但修改新的錯誤後,即將不能轉換爲日期時間格式的字符串:( – 2011-04-10 17:36:58

+0

你可以使用'DateTime.Now',而不是把它變成一個字符串,但這是我的猜測,因爲我不知道是哪一個DateTime導致了一個問題。 – Talljoe 2011-04-10 17:38:44

2

根本原因是@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 

瞭解更多關於SqlConnection.Dispose()using(){} block

+0

@abatishchev: - 現在出現的錯誤無法將字符串轉換爲日期時間。 )是09:00:00.0000000,我的字符串是09:00:00 – 2011-04-10 17:54:55

+0

@pixelerator:在哪一列? – abatishchev 2011-04-10 18:08:12

+0

表時間的最後一列(7) – 2011-04-10 18:11:59

0

您的存儲過程varchar需要更改以顯示字段的長度。 ie @fn varchar(50)。

0

與變量的數據類型一起,您應該提及數據項的大小。例如:varchar(50)