急求助,为什么我用了repeater修改数据库的内容时会出现这样的错误,只有红标的那个会出现报错,其他的不会,小弟刚学编程,学艺不精,求大神指教

Ch4uncey 2018-05-20 02:41:22



public partial class N : System.Web.UI.Page
{

DB db;
//SqlConnection sqlcon;
//SqlCommand sqlcom;
private string strCon = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; //"data source=(local);database=Wcwork;uid=sa;pwd=123;";
protected void Page_Load(object sender, EventArgs e)
{
db = DB.getInstance();
if (!IsPostBack)
{
//bind();

}
if (!Page.IsPostBack)
{//Page.SmartNavigation = True;
//绑定Repeater控件数据源
jfktA.DataSource = db.getBySql("select * from 机房b1空调温度");
jfktA.DataBind();
jfkt2.DataSource = get_datatable("select * from 机房b2空调温度");
jfkt2.DataBind();
jfktC.DataSource = get_datatable("select * from 机房b3空调温度");
jfktC.DataBind();
jgnx1.DataSource = get_datatable("select * from b3gl");
jgnx1.DataBind();
jgnx2.DataSource = get_datatable("select * from b2gl");
jgnx2.DataBind();
jgnx3.DataSource = get_datatable("select * from b1gl");
jgnx3.DataBind();
jfsd.DataSource = get_datatable("select * from 机房湿度");
jfsd.DataBind();
Repeater1.DataSource = get_datatable("select * from b1");
Repeater1.DataBind();
Repeater2.DataSource = get_datatable("select * from b2");
Repeater2.DataBind();
Repeater3.DataSource = get_datatable("select * from b3");
Repeater3.DataBind();
}
}
public DataTable get_datatable(string sql)
{
//数据库连接字符串
string strconn = "server=;uid=sa;pwd=123;database=Wcwork";
//实例化连接对象,并赋值strconn
SqlConnection conn = new SqlConnection(strconn);
//打开连接对象
conn.Open();
//临时存储
DataTable Temp_dt = new DataTable();
//实例化数据库适配器
SqlDataAdapter Dad = new SqlDataAdapter(sql, conn);
//填充
Dad.Fill(Temp_dt);
//关闭连接对象
conn.Close();
//释放连接对象资源
conn.Dispose();
//返回DataTable
return Temp_dt;
}
protected void jfsd_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "update")//如果点击的是被标记为CommandName="update"的按钮,也就是修改按钮
{
int id = int.Parse(e.CommandArgument.ToString().Split(',')[0]);//这里还真必须用单引号来表示字符,而不是""的字符串~,C#的Split就一个以字符,而不是字符串参数的代码
int itemIndex = int.Parse(e.CommandArgument.ToString().Split(',')[1]);//藏在CommandArgument='<%#Eval("id")+","+(Container as RepeaterItem).ItemIndex%>'逗号后面的参数就是该行行号
TextBox TextBox16 = jfsd.Items[itemIndex].FindControl("TextBox16") as TextBox;//获得改行的TextBox1
TextBox TextBox17 = jfsd.Items[itemIndex].FindControl("TextBox17") as TextBox;//获得改行的TextBox2
//这里是修改数据库表的一般逻辑,不赘述了
if (TextBox16.Text.Trim().Equals("") || TextBox17.Text.Trim().Equals(""))
{
Response.Write("<b>用户名,密码不得为空!</b>");
}
else
{
//if (db.getBySql("select * from [机房b1空调温度] where [机房b1]='{0}'", new Object[] { TextBox1.Text }).Rows.Count == 0)//如果没有这个用户名才能修改
//{
//db.setBySql("update [机房b1空调温度] set [机房b1]='{0}' where [id]={1}", new Object[] { TextBox1.Text, id });
db.setBySql("update [机房湿度] set [湿度]='{0}' where [所有机房]={1}", new Object[] { TextBox17.Text, id });
//数据绑定并不意味着会自动刷新jfkt11,必须自己再用代码,刷新一下jfkt11
jfsd.DataSource = db.getBySql("select * from [机房湿度]");
jfsd.DataBind();
// Response.Write("<b>已修改!</b>");
//}
//else
//{
// Response.Write("<b>已有该用户名!</b>");
//}
}
}
}
}
public class DB : IDisposable
{
private SqlConnection sqlConnection;

// 以下代码,保证该类只能有一个实例

// 在自己内部定义自己的一个实例,只供内部调用
private static DB db = null;

// 这个类必须自动向整个系统提供这个实例对象
// 这里提供了一个供外部访问本class的静态方法,可以直接访问
public static DB getInstance()
{
if (db == null)
{
db = new DB();
}
return db;
}

private DB()// 私有无参构造函数
{
sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString());
sqlConnection.Open();
}

//单例化结束

public DataTable getBySql(string sql, Object[] param)
{//查询
sql = String.Format(sql, param);//用字符串参数替换的形式防止注入
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(new SqlCommand(sql, sqlConnection));
DataTable dataTable = new DataTable();
sqlDataAdapter.Fill(dataTable);
return dataTable;
}
public DataTable getBySql(string sql)
{//无参数的查询
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(new SqlCommand(sql, sqlConnection));
DataTable dataTable = new DataTable();
sqlDataAdapter.Fill(dataTable);
return dataTable;
}

public void setBySql(string sql, Object[] param)
{ //无查询结果的修改
sql = String.Format(sql, param);//用字符串参数替换的形式防止注入
new SqlCommand(sql, sqlConnection).ExecuteNonQuery();
}
public void setBySql(string sql)
{ //无参数,无查询结果的修改
new SqlCommand(sql, sqlConnection).ExecuteNonQuery();
}

public void Dispose()
{//相当于析构函数
sqlConnection.Close();
//在C#中关闭数据库连接不能在类的析构函数中关,否则会抛“内部 .Net Framework 数据提供程序错误 1”的异常
//通过实现C#中IDisposable接口中的Dispose()方法主要用途是释放非托管资源。
}
}
...全文
1268 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
clark_kidd 2018-05-20
  • 打赏
  • 举报
回复
初学者调试程序不太会找原因的主要问题在于: 1 不会抓关键信息 首先这是一个 FormatException,也就是格式错误,并且下面写了“输入的字符串格式不正确”,所以问题一定是出在 “字符串”类型变量上,一个不是“0~9”的字符串转int会出错(可能) 2 太多函数放在一行里本来是没问题的,但是一旦出现错误,就应该考虑分行编写后重新调试 把你的代码分行撰写,以确保缩小调试范围: string args = e.CommangArgument.ToString(); string[] strings = args.split(','); string sIndex = strings[0]; int itemIndex = int.Parse(sIndex); //估计这一行会出错,观察 sIndex 值判断问题根源

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧