सम्मिलन कथन एसक्यूएल vb - sql, vb.net, combobox डालें

मुझे सम्मिलित कथन के साथ कोई समस्या है जब comboboxitem "ذكر" है यह ठीक काम कर रहा है, लेकिन जब combobox आइटम "انثي" है तो यह काम नहीं कर रहा है और यह संदेश दे रहा है

*स्ट्रिंग या बाइनरी डेटा छोटा किया जाएगा।

*बयान समाप्त कर दिया गया है।

Dim char1 As String
Dim char2 As String = TextBox7.Text.Substring(0, 4)
Dim char3 As String = Label29.Text
"******************* تاريخ انتهاء صلاحية الشهادة الصحية"
If TextBox9.Text.Length = 10 Then
HealthyIssue = TextBox9.Text
HealthyExpire = HealthyIssue.AddDays(364)
If ComboBox2.SelectedItem = "انثي" Then
char1 = 2
TextBox18.Text = char1 & char2 & char3
ElseIf ComboBox2.SelectedItem = "ذكر" Then
char1 = 1
TextBox18.Text = char1 & char2 & char3
End If

Dim connString As String = "...................."
Dim myConnection As SqlConnection = New SqlConnection(connString)
myConnection.Open()
Dim ss As String
ss = "INSERT INTO PersonalData ([Name], [IDNo], [Gender], [PlaceOfWork],[birthPlace], [PassportNo], [Nationality], [SocialState], [Occupation], [Mobile], [VisaNo], [VisaIssueDate], [VisaExpireDate], [EntryDate], [HealthyIssueDate], [HealthyExpireDate], [ContractIssue], [Guarantor], [Guarantorplace], [GuarantorPhoneNo], [Note]) VALUES (@Name, @IDNo, @Gender,  @PlaceOfWork, @birthPlace, @PassportNo, @Nationality, @SocialState, @Occupation, @Mobile, @VisaNo, @VisaIssueDate, @VisaExpireDate, @EntryDate, @HealthyIssueDate, @HealthyExpireDate, @ContractIssue, @Guarantor, @Guarantorplace,  @GuarantorPhoneNo, @Note) "
Dim cmdd As SqlCommand = New SqlCommand(ss, myConnection)
cmdd.Parameters.AddWithValue("@Name", TextBox1.Text)
cmdd.Parameters.AddWithValue("@IDNo", TextBox18.Text)
cmdd.Parameters.AddWithValue("@Gender", ComboBox2.SelectedItem)
cmdd.Parameters.AddWithValue("@PlaceOfWork", TextBox19.Text)
cmdd.Parameters.AddWithValue("@birthPlace", TextBox7.Text)
cmdd.Parameters.AddWithValue("@PassportNo", TextBox6.Text)
cmdd.Parameters.AddWithValue("@Nationality", ComboBox3.Text)
cmdd.Parameters.AddWithValue("@SocialState", TextBox8.Text)
cmdd.Parameters.AddWithValue("@Occupation", ComboBox4.Text)
cmdd.Parameters.AddWithValue("@Mobile", TextBox5.Text)
cmdd.Parameters.AddWithValue("@VisaNo", TextBox14.Text)
cmdd.Parameters.AddWithValue("@VisaIssueDate", TextBox15.Text)
cmdd.Parameters.AddWithValue("@VisaExpireDate", TextBox16.Text)
cmdd.Parameters.AddWithValue("@EntryDate", TextBox17.Text)
cmdd.Parameters.AddWithValue("@HealthyIssueDate", TextBox9.Text)
cmdd.Parameters.AddWithValue("@HealthyExpireDate", HealthyExpire)
cmdd.Parameters.AddWithValue("@ContractIssue", TextBox10.Text)
cmdd.Parameters.AddWithValue("@Guarantor", TextBox11.Text)
cmdd.Parameters.AddWithValue("@Guarantorplace", TextBox12.Text)
cmdd.Parameters.AddWithValue("@GuarantorPhoneNo", TextBox13.Text)
cmdd.Parameters.AddWithValue("@Note", TextBox19.Text)
cmdd.ExecuteNonQuery()
cmdd.Dispose()

उत्तर:

उत्तर № 1 के लिए 1

SQL तालिका से संबंधित त्रुटियों के लिए, "आमतौर पर आपके प्रश्न में तालिका परिभाषा (या इसके प्रासंगिक भाग) प्रदान करने का एक अच्छा विचार है। अब आपके प्रश्न में क्या है ...

जो काम करता है वह 3 अक्षर लगता है, और वह जो 4 वर्ण नहीं लगता है।

संभवतः आपके कॉलम को NVARCHAR (3) या NCHAR (3) के रूप में परिभाषित किया गया है।

यदि इसे व्यापक रूप से परिभाषित किया गया है, तो आपके डेटाबेस कॉलम प्रकार शायद एनसीएचएआर या एनवीएआरएआरएआर के बजाय चार्ज या वचरर है।

"ذكر" के यूनिकोड प्रतिनिधित्व में बाइट्स की संख्या भंडारण की निर्दिष्ट मात्रा में फिट होने के लिए काफी कम है, लेकिन "انثي" में बाइट्स की संख्या नहीं है।


जवाब के लिए 0 № 2

समस्या कॉलम की लंबाई से आने वाली स्ट्रिंग के बराबर नहीं है combobox आइटम।

सही करने के दो तरीके उस इनपुट के लिए कॉलम की लंबाई समायोजित करने के लिए तालिका संरचना को संशोधित करते हैं, या उपयोगकर्ता इनपुट को केवल 3 वर्णों में मान्य करते हैं।

थोड़ा सलाह, इसका उपयोग करने का सबसे अच्छा अभ्यास है STORED PROCEDURE, क्योंकि एक इनलाइन एसक्यूएल स्टेटमेंट एसक्यूएल इंजेक्शन हमले के लिए कमजोर है। विशेष रूप से जब आप एक गुजर रहे हैं STRING आपकी क्वेरी पर

अगर अप्रत्याशित परिणाम या त्रुटि से बचना चाहते हैं, तो बस उपयोग को कम करें .Parameters.AddWithValue क्योंकि उस तरह की प्रक्रिया में डेटाटाइप पैरामीटर अच्छी तरह से परिभाषित नहीं होते हैं, आप इसका उपयोग करके प्रतिस्थापित कर सकते हैं .Parameters.Add तो आप डेटाटाइप को परिभाषित कर सकते हैं।

कुछ इस तरह:

    .Parameters.Add("@ParameterName", DataType, Lenght).Value = ValueHere

.Parameters.Add("@IDNo", SqlDbType.Int, 5).Value = TextBox18.Text

कोडिंग में सर्वोत्तम प्रथाओं का उपयोग करते समय हम हमेशा अप्रत्याशित परिणाम और त्रुटियों से बच सकते हैं।


संबंधित सवाल
सबसे लोकप्रिय