2011-04-10 5 views
5

नीचे मेरी मेज स्क्रीनशॉट है: के बाद Main table designडालने के बाद, केवल एक वर्ण डेटाबेस में "स्ट्रिंग" की सम्मिलित किया जाता है

डाटा प्रविष्टि Data after insertion

कोड सी #

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 सर्वर 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 है, इसलिए एसक्यूएल केवल आपके वर्ण में एक वर्ण भेज रहा है।

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

- बहुत धन्यवाद ... मुझे लगता है कि समस्या हल हो जाएगी लेकिन नई त्रुटि को संशोधित करने के बाद स्ट्रिंग को डेटाटाइम प्रारूप में कनवर्ट नहीं किया जा रहा है :( –

+0

आप शायद इसके बजाय 'डेटटाइम.अब' का उपयोग कर सकते हैं इसे एक स्ट्रिंग में बदलना। लेकिन यह मेरा अनुमान है क्योंकि मुझे नहीं पता कि कौन सी डेटटाइम समस्या पैदा कर रही है। – Talljoe

2

मूल कारण @Talljoe के साथ-साथ @ जेथ्रो द्वारा भी उल्लेख किया गया है।

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: -नहीं त्रुटियां अब स्ट्रिंग को डेट समय में परिवर्तित नहीं कर सकती हैं। समय के मेरे डेटाबेस में प्रारूप (7) 09: 00: 00.0000000 है और मेरी स्ट्रिंग 09:00:00 –

+0

@ पिक्सेलरेटर: किस कॉलम में? – abatishchev

+0

तालिका समय का अंतिम स्तंभ (7) –

0

आपकी संग्रहीत प्रक्रिया वर्चर को फ़ील्ड की लंबाई दिखाने के लिए बदलने की जरूरत है। आईई @ एफएन वर्चर (50)।

0

चर के डेटा प्रकार के साथ, आपको डेटा आइटम के आकार का उल्लेख करना चाहिए। पूर्व: वर्कर (50)

संबंधित मुद्दे

 संबंधित मुद्दे