我该如何解决这个问题 [英] How do I solve this problem

查看:56
本文介绍了我该如何解决这个问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

每当我尝试标准表达中的数据类型不匹配

所以之后我使用了另一种不使用ctype的方法,但我仍然遇到同样的错误



我尝试过:



 cmd.Parameters.Add(New OleDbParameter( sr no,CType(TextBox13.Text,String)))
cmd.Parameters.Add(新OleDbParameter(入场日期,CType(MaskedTextBox2.Text,String)))
cmd。 Parameters.Add(New OleDbParameter(Student name,CType(TextBox1.Text,String)))
cmd.Parameters.Add(New OleDbParameter(Address Permanent,CType(TextBox2.Text,String)))
cmd.Parameters.Add(New OleDbParameter(Address Present,CType(TextBox3.Text,String)))
cmd.Parameters.Add(New OleDbParameter(Mobile no,CType(TextBox4。 Text,String)))
cmd.Parameters.Add(New OleDbParameter(出生日期,CType(MaskedTextBox1.Text,String)))
cmd.Parameters.Add(New OleDbParameter(Cast) , C Type(TextBox5.Text,String)))
cmd.Parameters.Add(New OleDbParameter(Subcast,CType(TextBox6.Text,String)))
cmd.Parameters.Add(New OleDbParameter( 教育资格,CType(ComboBox1.Text,String)))
cmd.Parameters.Add(New OleDbParameter(Semister,CType(ComboBox3.Text,String)))
cmd.Parameters。添加(New OleDbParameter(Course Name,CType(ComboBox2.Text,String)))
cmd.Parameters.Add(New OleDbParameter(Duration,CType(ComboBox4.Text,String)))
cmd.Parameters.Add(New OleDbParameter(Fees Paid rs,CType(TextBox7.Text,String)))
cmd.Parameters.Add(New OleDbParameter(Course Fees,CType(TextBox8.Text, String)))
cmd.Parameters.Add(New OleDbParameter(Admission Fees,CType(TextBox9.Text,String)))
cmd.Parameters.Add(New OleDbParameter(Exam Fees, CType(TextBox10.Text,String)))
cmd.Parameters.Add(New OleDbParameter(Total Fees,CType(TextBox11.Text,String)))
cmd.Parameters.Add(新OleDbParameter(Bal Fees,CType(TextBox12.Text,String)))







AFterwards我写的没有ctype



 cmd.Parameters.AddWithValue(sr no ,TextBox13.Text)
cmd.Parameters.AddWithValue(入场日期,MaskedTextBox2.Text)
cmd.Parameters.AddWithValue(学生名称,TextBox1.Text)
cmd。 Parameters.AddWithValue(Address Permanent,TextBox2.Text)
cmd.Parameters.AddWithValue(Address Present,TextBox3.Text)
cmd.Parameters.AddWithValue(Mobile no,TextBox4.Text )
cmd.Parameters.AddWithValue(出生日期,MaskedTextBox1.Text)
cmd.Parameters.AddWithValue(Cast,TextBox5.Text)
cmd.Parameters.AddWithValue( Subcast,TextBox6.Text)
cmd.Parameters.AddWithValue(Educational Qualification,ComboBox1.Text)
cmd.Parameters.AddWithValue(Semister,ComboBox3.Text)
cmd.Parameters.AddWithValue(Course Name,ComboBox2.Text)
cmd.Parameters.AddWithValue(Duration,ComboBox4.Text)
cmd.Parameters.AddWithValue(Fees Paid rs,TextBox7 .Text)
cmd.Parameters.AddWithValue(Course Fees,TextBox8.Text)
cmd.Parameters.AddWithValue(Admission Fee,TextBox9.Text)
cmd.Parameters.AddWithValue (考试费用,TextBox10.Text)
cmd.Parameters.AddWithValue(总费用,TextBox11.Text)
cmd.Parameters.AddWithValue(Bal Fees,TextBox12.Text)

解决方案

首先,请勿在列中使用空格!永远不要在任何SQL对象名称中使用空格,例如表名,列名,存储过程名,blah,blah,blah ......



接下来,请勿使用空格在你的参数名称!此外,参数通常以@字符开头。我看不到你的SQL语句,但你发布的代码会暗示你的SQL语句也写得非常非常错误。



并且,不要使用用户输入直接在您的参数中。始终验证并规范用户输入。相信它就像地狱的产生一样。



为什么你在使用CType to String时,每个TextBox.Text属性都不会返回除String以外的任何内容? / blockquote>

Dave指出的所有内容都是有效的。



了解正在使用的数据库类型将非常有用;我们可以从您的代码中看到的唯一线索就是您正在使用OleDB提供程序。



这也有助于您了解数据库表的架构与之合作,因为这是您最有可能遇到实际问题的地方;你不能在一个数字字段中插入一个字符串。



从你显示的代码中,这些字段中的一些可能是字符串以外的类型。我已在您的原始代码中添加注释行,以显示可能需要根据参数名称更改的项目

 ' 这可能是一个整数 
cmd.Parameters.AddWithValue( sr no,TextBox13.Text)

' 这可能是一个日期/时间
cmd.Parameters.AddWithValue( 入场日期 ,MaskedTextBox2.Text)

cmd.Parameters.AddWithValue( 学生姓名,TextBox1.Text)
cmd.Parameters.AddWithValue( Address Permanent,TextBox2 .Text)
cmd.Parameters.AddWithValue( Address Present,Tex tBox3.Text)
cmd.Parameters.AddWithValue( Mobile no,TextBox4.Text )

' 这可能是日期/时间
cmd .Parameters.AddWithValue( 出生日期,MaskedTextBox1.Text)

cmd.Parameters.AddWithValue( Cast,TextBox5.Text)
cmd.Parameters .AddWithValue( Subcast,TextBox6.Text)
cmd.Parameters.AddWithValue(< span class =code-string> 教育资格,ComboBox1.Text)
cmd.Parameters.AddWithValue( Semister,ComboBox3.Text)
cmd.Parameters.AddWithValue( 课程名称,ComboBox2.Text)
cmd.Parameters.AddWithValue( 持续时间,ComboBox4.Text)

' 这些可能是货币还是单个
cmd.Parameters.AddWithValue( 费用支付,TextBox7.Text )
cmd.Parameters.AddWithValue( 课程费用,TextBox8.Text)
cmd.Parameters.AddWithValue( 入场费,TextBox9.Text)
cmd .Parameters.AddWithValue( 考试费用,TextBox10.Text)
cmd.Parameters。 AddWithValue( Total Fees,TextBox11.Text)
cmd.Parameters.AddWithValue(< span class =code-string> < span class =code-string> Bal Fees,TextBox12.Text)



如果需要更改这些或其他任何一个以匹配db架构,你需要相应地转换它们。



另外需要注意的是OleDB提供商;参数添加到命令的顺序必须与它们在实际命令中出现的顺序相同


whenever i tried i got "DATA TYPE MISMATCH IN CRITERIA EXPRESSION"
so afterwards I used another method suggested without using ctype but i still got that same error

What I have tried:

cmd.Parameters.Add(New OleDbParameter("sr no", CType(TextBox13.Text, String)))
       cmd.Parameters.Add(New OleDbParameter("Date of admission", CType(MaskedTextBox2.Text, String)))
       cmd.Parameters.Add(New OleDbParameter("Student name", CType(TextBox1.Text, String)))
       cmd.Parameters.Add(New OleDbParameter("Address Permanent", CType(TextBox2.Text, String)))
       cmd.Parameters.Add(New OleDbParameter("Address Present", CType(TextBox3.Text, String)))
       cmd.Parameters.Add(New OleDbParameter("Mobile no", CType(TextBox4.Text, String)))
       cmd.Parameters.Add(New OleDbParameter("Date of birth", CType(MaskedTextBox1.Text, String)))
       cmd.Parameters.Add(New OleDbParameter("Cast", CType(TextBox5.Text, String)))
       cmd.Parameters.Add(New OleDbParameter("Subcast", CType(TextBox6.Text, String)))
       cmd.Parameters.Add(New OleDbParameter("Educational Qualification", CType(ComboBox1.Text, String)))
       cmd.Parameters.Add(New OleDbParameter("Semister", CType(ComboBox3.Text, String)))
       cmd.Parameters.Add(New OleDbParameter("Course Name", CType(ComboBox2.Text, String)))
       cmd.Parameters.Add(New OleDbParameter("Duration", CType(ComboBox4.Text, String)))
       cmd.Parameters.Add(New OleDbParameter("Fees Paid rs", CType(TextBox7.Text, String)))
       cmd.Parameters.Add(New OleDbParameter("Course Fees", CType(TextBox8.Text, String)))
       cmd.Parameters.Add(New OleDbParameter("Admission Fees", CType(TextBox9.Text, String)))
       cmd.Parameters.Add(New OleDbParameter("Exam Fees", CType(TextBox10.Text, String)))
       cmd.Parameters.Add(New OleDbParameter("Total Fees", CType(TextBox11.Text, String)))
       cmd.Parameters.Add(New OleDbParameter("Bal Fees", CType(TextBox12.Text, String)))




AFterwards i wrote without ctype

cmd.Parameters.AddWithValue("sr no", TextBox13.Text)
       cmd.Parameters.AddWithValue("Date of admission", MaskedTextBox2.Text)
       cmd.Parameters.AddWithValue("Student name", TextBox1.Text)
       cmd.Parameters.AddWithValue("Address Permanent", TextBox2.Text)
       cmd.Parameters.AddWithValue("Address Present", TextBox3.Text)
       cmd.Parameters.AddWithValue("Mobile no", TextBox4.Text)
       cmd.Parameters.AddWithValue("Date of birth", MaskedTextBox1.Text)
       cmd.Parameters.AddWithValue("Cast", TextBox5.Text)
       cmd.Parameters.AddWithValue("Subcast", TextBox6.Text)
       cmd.Parameters.AddWithValue("Educational Qualification", ComboBox1.Text)
       cmd.Parameters.AddWithValue("Semister", ComboBox3.Text)
       cmd.Parameters.AddWithValue("Course Name", ComboBox2.Text)
       cmd.Parameters.AddWithValue("Duration", ComboBox4.Text)
       cmd.Parameters.AddWithValue("Fees Paid rs", TextBox7.Text)
       cmd.Parameters.AddWithValue("Course Fees", TextBox8.Text)
       cmd.Parameters.AddWithValue("Admission Fees", TextBox9.Text)
       cmd.Parameters.AddWithValue("Exam Fees", TextBox10.Text)
       cmd.Parameters.AddWithValue("Total Fees", TextBox11.Text)
       cmd.Parameters.AddWithValue("Bal Fees", TextBox12.Text)

解决方案

First, DO NOT USE SPACES IN YOUR COLUMN NAMES! Never use spaces in any SQL object names, like table names, column names, stored procedure names, blah, blah, blah...

Next, DO NOT USE SPACES IN YOUR PARAMETER NAMES! Also, parameters are typically preceeded with a @ character. I can't see your SQL statement, but the code you posted would suggest that your SQL statement is also written very, very wrong.

And, DO NOT EVER USE USER INPUT DIRECTLY IN YOUR PARAMETERS. Always validate and normalize user input. Trust it like the spawn of hell that it is.

Why on earth are you using CType to String when every TextBox.Text property never returns anything except a String?


Everything Dave points out as valid.

Knowing the type of database in use would be very helpful; the only clue we can see from your code is that you are using the OleDB provider for it.

It would also help to know the schema of the database table you are working with, as this is where you are having the actual issue most likely; you cannot insert a string into a numeric field.

From the code you did show, some of these fields may be of types other than string. I have thrown comment lines into your original code to show you the items that may need to be changed based on parameter names

' could this be an integer
cmd.Parameters.AddWithValue("sr no", TextBox13.Text)

' could this be a Date/Time
cmd.Parameters.AddWithValue("Date of admission", MaskedTextBox2.Text)

cmd.Parameters.AddWithValue("Student name", TextBox1.Text)
cmd.Parameters.AddWithValue("Address Permanent", TextBox2.Text)
cmd.Parameters.AddWithValue("Address Present", TextBox3.Text)
cmd.Parameters.AddWithValue("Mobile no", TextBox4.Text)

' could this be a Date/Time
cmd.Parameters.AddWithValue("Date of birth", MaskedTextBox1.Text)		

cmd.Parameters.AddWithValue("Cast", TextBox5.Text)
cmd.Parameters.AddWithValue("Subcast", TextBox6.Text)
cmd.Parameters.AddWithValue("Educational Qualification", ComboBox1.Text)
cmd.Parameters.AddWithValue("Semister", ComboBox3.Text)
cmd.Parameters.AddWithValue("Course Name", ComboBox2.Text)
cmd.Parameters.AddWithValue("Duration", ComboBox4.Text)

' could these be currency or single
cmd.Parameters.AddWithValue("Fees Paid rs", TextBox7.Text)			
cmd.Parameters.AddWithValue("Course Fees", TextBox8.Text)
cmd.Parameters.AddWithValue("Admission Fees", TextBox9.Text)
cmd.Parameters.AddWithValue("Exam Fees", TextBox10.Text)
cmd.Parameters.AddWithValue("Total Fees", TextBox11.Text)
cmd.Parameters.AddWithValue("Bal Fees", TextBox12.Text)	


If any of these or others need to be changed to match the db schema, you will need to convert these accordingly.

Another item to note is that with the OleDB provider; the order the parameters are added to the command is required to be the same as the order in which they appear in the actual command


这篇关于我该如何解决这个问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆