程序代码如下:
<%@ Page Language="VB" ContentType="text/html" ResponseEncoding="gb2312" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>论坛</title>
</head>
<script language="vb" runat="server">
sub Submit_OnClick(sender as Object,e as EventArgs)
if Page.IsValid then
dim subjectU,username,e_mail,text as string
subjectU = trim(subject.text)
username = trim(send.text)
e_mail = trim(email.text)
text = body.text
text = replace(text,chr(13)+chr(10),"<br>")
dim senddate as string = now
dim conn as OleDbConnection
conn = new OleDbConnection()
conn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" & server.MapPath("discuss.mdb")
conn.Open()
dim cmd as OleDbCommand
dim sql as string
sql = "select max(id) as id from content"
cmd = new OleDbCommand(sql,conn)
dim rd as OleDbDataReader
dim maxid as Integer
rd = cmd.ExecuteReader()
rd.Read()
if IsDBNull(rd.Item("id")) then
maxid = 1
else
maxid = rd.Item("id")+1
end if
rd.Close()
sql = "insert into content values('"+maxid+"','"+subjectU+"','"+username+"','"+e_mail+"','"+text+"','"+senddate+"','0')"
cmd = new OleDbCommand(sql,conn)
cmd.ExecuteNonQuery()
conn.Close()
Response.Write("帖子已成功发布,谢谢")
subject.text=""
body.text=""
send.text=""
email.text=""
end if
end sub
sub Clear_OnClick(sender as Object,e as EventArgs)
subject.text=""
body.text=""
send.text=""
email.text=""
end sub
</script>
<body>
<form runat="server">
文章标题:<asp:textbox ID="subject" runat="server" />
<asp:RequiredFieldValidator ID="valid1" runat="server" ControlToValidate="subject">(必要栏)
</asp:RequiredFieldValidator><br>
文章内容:<asp:textbox ID="body" runat="server" TextMode="MultiLine" Rows="5" Width="80%" />
<asp:RequiredFieldValidator ID="valid2" runat="server" ControlToValidate="body">(必要栏)
</asp:RequiredFieldValidator><br>
您的大名:<asp:textbox ID="send" runat="server" />
<asp:RequiredFieldValidator ID="valid4" ControlToValidate="send" runat="server">(名字不能少哦)
</asp:RequiredFieldValidator><br>
邮件地址:<asp:textbox ID="email" runat="server" />
<asp:RegularExpressionValidator ID="valid5" runat="server" ControlToValidate="email"
ValidationExpression=".{1,}@.{1,}\..{1,}">(请输入有效的邮件地址)
</asp:RegularExpressionValidator><p>
<asp:button ID="submit" Text="发表流言" runat="server" OnClick="Submit_OnClick" />
<input type="button" ID="clear" value="清除重写" runat="server" OnServerClick="Clear_OnClick" />
</form>
</body>
</html>我的问题就出在插入数据库的时候出现的。我的数据表content
字段为:
id 长整形
subject 文本
sender 文本
email 文本
body 文本
senddate 文本
parent 长整形每次提交的时候总是提示:
输入字符串的格式不正确。
我找到了根接的所在,就是那个'"+maxid+"'出的问题,也就是说我定义的maxid这个整形变量不能和数据库内的id字段匹配。
我认为是这个地方出了问题,可就是无法排除错误
dim maxid as Integer
rd = cmd.ExecuteReader()
rd.Read()
if IsDBNull(rd.Item("id")) then 就是这里有问题
maxid = 1
else
maxid = rd.Item("id")+1
end if
我想判断rd.Read()所查出的的最大值,如果查到的是空则maxid = 1,如果不为空就+1。但是我不知道该如何写这个if判断条件了,有时候总是说DBNull和integer类型不匹配。
大哥们帮我看看了,急死了。
<%@ Page Language="VB" ContentType="text/html" ResponseEncoding="gb2312" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>论坛</title>
</head>
<script language="vb" runat="server">
sub Submit_OnClick(sender as Object,e as EventArgs)
if Page.IsValid then
dim subjectU,username,e_mail,text as string
subjectU = trim(subject.text)
username = trim(send.text)
e_mail = trim(email.text)
text = body.text
text = replace(text,chr(13)+chr(10),"<br>")
dim senddate as string = now
dim conn as OleDbConnection
conn = new OleDbConnection()
conn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" & server.MapPath("discuss.mdb")
conn.Open()
dim cmd as OleDbCommand
dim sql as string
sql = "select max(id) as id from content"
cmd = new OleDbCommand(sql,conn)
dim rd as OleDbDataReader
dim maxid as Integer
rd = cmd.ExecuteReader()
rd.Read()
if IsDBNull(rd.Item("id")) then
maxid = 1
else
maxid = rd.Item("id")+1
end if
rd.Close()
sql = "insert into content values('"+maxid+"','"+subjectU+"','"+username+"','"+e_mail+"','"+text+"','"+senddate+"','0')"
cmd = new OleDbCommand(sql,conn)
cmd.ExecuteNonQuery()
conn.Close()
Response.Write("帖子已成功发布,谢谢")
subject.text=""
body.text=""
send.text=""
email.text=""
end if
end sub
sub Clear_OnClick(sender as Object,e as EventArgs)
subject.text=""
body.text=""
send.text=""
email.text=""
end sub
</script>
<body>
<form runat="server">
文章标题:<asp:textbox ID="subject" runat="server" />
<asp:RequiredFieldValidator ID="valid1" runat="server" ControlToValidate="subject">(必要栏)
</asp:RequiredFieldValidator><br>
文章内容:<asp:textbox ID="body" runat="server" TextMode="MultiLine" Rows="5" Width="80%" />
<asp:RequiredFieldValidator ID="valid2" runat="server" ControlToValidate="body">(必要栏)
</asp:RequiredFieldValidator><br>
您的大名:<asp:textbox ID="send" runat="server" />
<asp:RequiredFieldValidator ID="valid4" ControlToValidate="send" runat="server">(名字不能少哦)
</asp:RequiredFieldValidator><br>
邮件地址:<asp:textbox ID="email" runat="server" />
<asp:RegularExpressionValidator ID="valid5" runat="server" ControlToValidate="email"
ValidationExpression=".{1,}@.{1,}\..{1,}">(请输入有效的邮件地址)
</asp:RegularExpressionValidator><p>
<asp:button ID="submit" Text="发表流言" runat="server" OnClick="Submit_OnClick" />
<input type="button" ID="clear" value="清除重写" runat="server" OnServerClick="Clear_OnClick" />
</form>
</body>
</html>我的问题就出在插入数据库的时候出现的。我的数据表content
字段为:
id 长整形
subject 文本
sender 文本
email 文本
body 文本
senddate 文本
parent 长整形每次提交的时候总是提示:
输入字符串的格式不正确。
我找到了根接的所在,就是那个'"+maxid+"'出的问题,也就是说我定义的maxid这个整形变量不能和数据库内的id字段匹配。
我认为是这个地方出了问题,可就是无法排除错误
dim maxid as Integer
rd = cmd.ExecuteReader()
rd.Read()
if IsDBNull(rd.Item("id")) then 就是这里有问题
maxid = 1
else
maxid = rd.Item("id")+1
end if
我想判断rd.Read()所查出的的最大值,如果查到的是空则maxid = 1,如果不为空就+1。但是我不知道该如何写这个if判断条件了,有时候总是说DBNull和integer类型不匹配。
大哥们帮我看看了,急死了。
--------------------------------
改成
sql = "insert into content values("+maxid+",'"+subjectU+"','"+username+"','"+e_mail+"','"+text+"','"+senddate+"','0')"//int类型的不要加'',也就是'"+maxid+"'-->"+maxid+"
提示:输入字符串的格式不正确。
但我要是把"+maxid+"换成数字就可以插入成功,该怎么办啊。
这个执行后,CLR自动为你创建读取器的架构,它的列标题不一定是id的
rd.Item("id"))改成rd.Item(0)
源错误:
行 36: end if
行 37: rd.Close()
行 38: sql = "insert into content values("+maxid+",'"+subjectU+"','"+username+"','"+e_mail+"','"+text+"','"+senddate+"',0)"
行 39: cmd = new OleDbCommand(sql,conn)
行 40: cmd.ExecuteNonQuery()
[FormatException: 输入字符串的格式不正确。]
Microsoft.VisualBasic.CompilerServices.DoubleType.Parse(String Value, NumberFormatInfo NumberFormat) +195
Microsoft.VisualBasic.CompilerServices.DoubleType.FromString(String Value, NumberFormatInfo NumberFormat) +82[InvalidCastException: 从字符串“insert into content values(”到类型“Double”的强制转换无效。]
Microsoft.VisualBasic.CompilerServices.DoubleType.FromString(String Value, NumberFormatInfo NumberFormat) +171
Microsoft.VisualBasic.CompilerServices.DoubleType.FromString(String Value) +7
INSERT INTO content(subject,sender,email,body,senddate,parent) VALUES("'"+subjectU+"','"+username+"','"+e_mail+"','"+text+"','"+senddate+"',0)"