asp.net实验:数据库写入不成功

2024-09-01 16:52

本文主要是介绍asp.net实验:数据库写入不成功,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

问题描述

  asp.net实验:数据库写入不成功

最近在做一个租赁系统的开发实验,遇到了两个问题,
问题一:进行数据库写入时总是提示失败;
问题二:不填写预租时间提交时网页报错;对于这个问题我知道是date型数据不能为空造成的,但不知道该如何解决。
请对以上两个问题解惑,谢谢
我的设计如下:
数据库设计:

前端设计主要代码:

<tr><td class="auto-style7" style="text-align: right">设备名称:</td><td class="auto-style11"><asp:Dropdownlist ID="Device_Name" runat="server" Width="147px" AutoPostBack="True" DataTextField="DEVICE_NAME" DataValueField="DEVICE_NAME" OnSelectedIndexChanged="Device_Name_SelectedIndexChanged"></asp:Dropdownlist></td><td class="auto-style10">&nbsp;</td><td>&nbsp;</td></tr><tr><td class="auto-style7" style="text-align: right">租赁价格:</td><td class="auto-style11"><asp:Label ID="Price" runat="server" Width="142px" BorderStyle="Inset"></asp:Label>/</td><td class="auto-style10">&nbsp;</td><td>&nbsp;</td></tr><tr><td class="auto-style12" style="text-align: right">租户姓名:</td><td class="auto-style13"><asp:TextBox ID="Cust_Name" runat="server" Width="142px"></asp:TextBox></td><td class="auto-style14"></td><td class="auto-style15"></td></tr><tr><td class="auto-style12" style="text-align: right">身份证号:</td><td class="auto-style13"><asp:TextBox ID="Cust_PID" runat="server" Width="142px"></asp:TextBox></td><td class="auto-style16"></td><td class="auto-style15"></td></tr><tr><td class="auto-style7" style="text-align: right">联系电话:</td><td class="auto-style11"><asp:TextBox ID="Tel" runat="server" Width="142px"></asp:TextBox></td><td class="auto-style8">&nbsp;</td><td>&nbsp;</td></tr><tr><td class="auto-style7" style="text-align: right">预租时间:</td><td class="auto-style11"><asp:TextBox ID="Pre_in" runat="server" Width="142px" TextMode="Date"></asp:TextBox></td><td class="auto-style10">&nbsp;</td><td>&nbsp;</td></tr><tr><td class="auto-style7" style="text-align: right">租借天数:</td><td class="auto-style11"><asp:TextBox ID="Pre_Days" runat="server" Width="142px"></asp:TextBox></td><td class="auto-style8">&nbsp;</td><td>&nbsp;</td></tr><tr><td class="auto-style7">&nbsp;</td><td colspan="2"><asp:Button ID="UPDATE" runat="server" Text="提交" OnClick="UPDATE_Click" />
&nbsp;<asp:Button ID="BACK" runat="server" Text="返回" OnClick="BACK_Click" /></td><td>&nbsp;</td></tr>

后台设计代码

using System;
using System.Data;
using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;public partial class device_request : System.Web.UI.Page
{public void DEVICEBind(){DB db = new DB();string sqlStr1 = "select * from device_info where DEVICE_STATUS='未租赁' ";DataTable Dt = db.ReDt(sqlStr1);Device_Name.Items.Clear();Device_Name.DataSource = Dt;Device_Name.DataTextField = "DEVICE_NAME";Device_Name.DataValueField = "DEVICE_NAME";Device_Name.DataBind();Device_Name.Items.Insert(0, new ListItem("", ""));}protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){DEVICEBind();}}protected void Device_Name_SelectedIndexChanged(object sender, EventArgs e){string dev_name = Device_Name.SelectedValue;DB db = new DB();        string sqlStr2 = "select DEVICE_PRICE from device_price where DEVICE_NAME='" + dev_name + "' ";DataTable Dt2 = db.ReDt(sqlStr2);decimal dev_price = Convert.ToDecimal(Dt2.Rows[0]["DEVICE_PRICE"]);Price.Text = dev_price.ToString("C");}protected void UPDATE_Click(object sender, EventArgs e){string dev_name = Device_Name.Text.Trim();string name = Cust_Name.Text.Trim();string pid = Cust_PID.Text.Trim();string tel = Tel.Text.Trim();DateTime pre_in = DateTime.Parse(Pre_in.Text);float pre_days = float.Parse(Pre_Days.Text);DB db = new DB();string sqlStr1 = "select DEVICE_PRICE from device_price where DEVICE_NAME='" + dev_name + "'";DataTable Dt1 = db.ReDt(sqlStr1);float dev_price = (float)Convert.ToDecimal(Dt1.Rows[0]["DEVICE_PRICE"]);float pre_spend = dev_price * pre_days;string sqlStr2 = "insert device_request (NAME,PID,TEL,DEVICE_NAME,LEASE_BEGIN,LEASE_TIME,PRE_SPEND) VALUES ('" + name + "','" + pid + "','" + tel + "','" + dev_name + "','" + pre_in + "'," + pre_days + "," + pre_spend + ")";int reValue = db.SqlEx(sqlStr2);if (name!="" || pid!=""|| dev_name!=""||Pre_in.Text!=""||Pre_Days.Text!=""){if(pre_in>=DateTime.Now){if (reValue == 1){Response.Write("<script>alert('提交成功');</script>");}else{Response.Write("<script>alert('信息提交失败');</script>");}}else{Response.Write("<script>alert('预租赁时间不能早于提交订单的时间');</script>");}}else{Response.Write("<script>alert('不能有空白项!');</script>");Response.Redirect("~/customer_room_check_in.aspx");} }protected void BACK_Click(object sender, EventArgs e){Response.Redirect("~/customer_room_introduce.aspx");}
}

宏文件主要代码:

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Text;
using System.Security.Cryptography;
using System.Data.SqlClient;
public class DB
{public DB(){}public SqlConnection GetCon(){return new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"].ToString());}public int SqlEx(string cmdstr){SqlConnection con = GetCon();con.Open();SqlCommand cmd = new SqlCommand(cmdstr, con);try{cmd.ExecuteNonQuery();return 1;}catch (Exception e){return 0;}finally{con.Dispose()}}
}

web.config配置

<appSettings><add key="ConnectionString" value="server=LI6HAR2AK6754L6;Uid=user;pwd=Cebpass@123;database=device_lease;" />
</appSettings>

补充:

第2个问题已经通过调整代码顺序解决;
第1个问题我找到问题原因了,是Pre_in.Text转换成DateTime类型后,数据格式与数据表device_request中LEASE_BEGIN列的数据格式不一致,数据表里这一列的数据类型是date,格式是" y-m-d",Pre_in.Text转换成DateTime类型后格式是“年-月-日 星期X hⓂ️s”,请问怎样才能把Pre_in.Text转成DateTime类型后,数据格式与数据库定义格式一致?

友情提示:
  如上问题有的来自我自身项目开发,有的收集网站,有的来自读者…如有侵权,立马删除。再者,针对此专栏中部分问题及其问题的解答思路或步骤等,存在少部分搜集于全网社区及人工智能问答等渠道,若最后实在是没能帮助到你,还望见谅!并非所有的解答都能解决每个人的问题,在此希望屏幕前的你能够给予宝贵的理解,而不是立刻指责或者抱怨!如果你有更优解,那建议你出教程写方案,一同学习!共同进步。

解决方案

  如下是上述问题的解决方案,仅供参考:

  针对您提出的两个问题,以下是我的建议和解决方案:

问题一:数据库写入失败

数据库写入失败可能由多种原因引起,以下是一些常见的原因:

  1. SQL 语句错误:检查您的 SQL 插入语句是否正确,确保字段名和数据类型与数据库中的设置相匹配。

  2. 数据库连接问题:确保数据库连接字符串正确无误,并且数据库服务正在运行。

  3. 事务处理:如果使用了事务,确保事务被正确提交或回滚。

  4. 错误处理:在 SqlEx 方法中,您应该检查 cmd.ExecuteNonQuery() 是否抛出异常,并在 catch 块中记录或输出错误信息,以便调试。

  5. 数据类型不匹配:确保传递给 SQL 语句的数据类型与数据库中的字段类型一致。例如,日期时间字段可能需要特定的格式。

对于日期时间格式问题,您可以使用 DateTime.ToString 方法来格式化日期时间字符串,以匹配数据库中的格式要求:

// 假设您希望的日期格式为 "yyyy-MM-dd"
string formattedDate = pre_in.ToString("yyyy-MM-dd");
string sqlStr2 = "insert into device_request (NAME, PID, TEL, DEVICE_NAME, LEASE_BEGIN, LEASE_TIME, PRE_SPEND) VALUES (@name, @pid, @tel, @dev_name, @pre_in, @pre_days, @pre_spend)";
SqlCommand cmd = new SqlCommand(sqlStr2, con);
cmd.Parameters.AddWithValue("@name", name);
// ... 其他参数 ...
cmd.Parameters.AddWithValue("@pre_in", formattedDate);
// 执行 SQL 命令

问题二:不填写预租时间提交时报错

您已经提到这个问题通过调整代码顺序解决了。通常,对于日期类型的字段,如果数据库中不允许为空,您需要确保在提交表单之前该字段已经被赋值。如果用户没有填写,您可以设置一个默认值,例如当前日期。

另外,对于 Pre_inTextBox 控件,您可以设置 ValidationExpression 属性来确保用户输入的是有效的日期格式:

<asp:TextBox ID="Pre_in" runat="server" Width="142px" TextMode="Date" ValidationExpression="\d{4}-\d{2}-\d{2}"></asp:TextBox>

这将要求用户输入的日期格式为 yyyy-MM-dd

最后,确保在 UPDATE_Click 方法中添加适当的验证逻辑,以检查所有必填字段是否已填写,并且在尝试插入数据库之前,所有字段都具有有效值。

希望这些建议能帮助您解决问题。如果您需要进一步的帮助,请提供更多的错误信息或代码细节。

  希望如上措施及解决方案能够帮到有需要的你。

  PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。

  若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。

☀️写在最后

  ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏《CSDN问答解惑-专业版》,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。

码字不易,如果这篇文章对你有所帮助,帮忙给 bug菌 来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。

同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿哇。


这篇关于asp.net实验:数据库写入不成功的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127515

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是

DM8数据库安装后配置

1 前言 在上篇文章中,我们已经成功将库装好。在安装完成后,为了能够更好地满足应用需求和保障系统的安全稳定运行,通常需要进行一些基本的配置。下面是一些常见的配置项: 数据库服务注册:默认包含14个功能模块,将这些模块注册成服务后,可以更好的启动和管理这些功能;基本的实例参数配置:契合应用场景和发挥系统的最大性能;备份:有备无患;… 2 注册实例服务 注册了实例服务后,可以使用系统服务管理,

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

开源分布式数据库中间件

转自:https://www.csdn.net/article/2015-07-16/2825228 MyCat:开源分布式数据库中间件 为什么需要MyCat? 虽然云计算时代,传统数据库存在着先天性的弊端,但是NoSQL数据库又无法将其替代。如果传统数据易于扩展,可切分,就可以避免单机(单库)的性能缺陷。 MyCat的目标就是:低成本地将现有的单机数据库和应用平滑迁移到“云”端