扫描我的表c#mysql
所以我在做一个图书馆系统,我在借书和还书的过程中遇到了一个问题 当我借一本书然后归还时,将状态更改为return,然后再次成功地借用同一本书,然后当我归还时,将显示return books(归还书的陷阱)消息扫描我的表c#mysql,c#,mysql,C#,Mysql,所以我在做一个图书馆系统,我在借书和还书的过程中遇到了一个问题 当我借一本书然后归还时,将状态更改为return,然后再次成功地借用同一本书,然后当我归还时,将显示return books(归还书的陷阱)消息 sql = "SELECT * FROM tbltransactionbooks WHERE fBarCodeNo LIKE '" + txtBARCODE_R.Text.Trim() + "%'"; cfgotcall.engageQuery(sql); if (cfgotcall.tb
sql = "SELECT * FROM tbltransactionbooks WHERE fBarCodeNo LIKE '" + txtBARCODE_R.Text.Trim() + "%'";
cfgotcall.engageQuery(sql);
if (cfgotcall.tbl.Rows[0]["fStatus"].ToString().Equals("Borrowed"))
{
txtTITLE_R.Text = cfgotcall.tbl.Rows[0]["fBookTitle"].ToString();
txtAUTHOR_R.Text = cfgotcall.tbl.Rows[0]["fAuthor"].ToString();
txtYEAR_R.Text = cfgotcall.tbl.Rows[0]["fBookYr"].ToString();
txtACCNO_R.Text = cfgotcall.tbl.Rows[0]["fAccNo"].ToString();
txtCALLNO_R.Text = cfgotcall.tbl.Rows[0]["fCallNo"].ToString();
txtBARCODE_BR.Text = cfgotcall.tbl.Rows[0]["fBarcodeNo"].ToString();
txtSEARCH.Text = cfgotcall.tbl.Rows[0]["fStudent"].ToString();
txtReturnDate.Text = cfgotcall.tbl.Rows[0]["fBorrowDate"].ToString();
txtIDNO.Text = cfgotcall.tbl.Rows[0]["fIDStudent"].ToString();
txtLEVEL.Text = cfgotcall.tbl.Rows[0]["fLevel"].ToString();
}
else
{
MessageBox.Show("Book already returned.");
}
我在pic中自己的代码中调试的是,它不会扫描tbltransactionbooks
中的整行,它只读取我表格的第一行
33 123 NAME IT 2/20/2017 2/20/2017 [HISTORY OF] COMPUTERS: THE MACHINES WE THINK WITH Returned
33 123 NAME IT 2/21/2017 2/21/2017 [HISTORY OF] COMPUTERS: THE MACHINES WE THINK WITH Borrowed
!![2] :
如何扫描表格中的整行?如果我上面的代码看起来不好,我会公开建议如何使它干净。谢谢您只访问表的第一行[0]。您需要使用for或foreach循环遍历所有这些循环
旁注:我想这是一个家庭作业。如果你在互联网上找到完整的解决方案,那对你没有任何好处。您应该尝试了解集合/数组是如何工作的,以及如何使用循环遍历它们
一些教程可帮助您完成此任务:
cfgotcall.tbl.Rows[0]
仅指第一行
您应该迭代每一行:
sql = "SELECT * FROM tbltransactionbooks WHERE fBarCodeNo LIKE '" + txtBARCODE_R.Text.Trim() + "%'";
cfgotcall.engageQuery(sql);
foreach(var row in cfgotcall.tbl.Rows)
{
if (row["fStatus"].ToString().Equals("Borrowed"))
{
txtTITLE_R.Text = row["fBookTitle"].ToString();
txtAUTHOR_R.Text = row["fAuthor"].ToString();
txtYEAR_R.Text = row["fBookYr"].ToString();
txtACCNO_R.Text = row["fAccNo"].ToString();
txtCALLNO_R.Text = row["fCallNo"].ToString();
txtBARCODE_BR.Text = row["fBarcodeNo"].ToString();
txtSEARCH.Text = row["fStudent"].ToString();
txtReturnDate.Text = row["fBorrowDate"].ToString();
txtIDNO.Text = row["fIDStudent"].ToString();
txtLEVEL.Text = row["fLevel"].ToString();
}
else
{
MessageBox.Show("Book already returned.");
}
}
为了避免由于列名和SQL查询中的键入错误而导致运行时错误,可以使用或。这样,每一行都将转换为一个对象,您可以通过访问对象属性\字段来访问每一列。第一行被选中,因为仅使用访问第一行:
if (cfgotcall.tbl.Rows[0]...)
要检查所有行,请使用for或foreach循环遍历cfgotcall.tbl.rows集合。您确实需要清理输入。很抱歉,我第一次在这里,在google上找不到我的问题。这与您的问题无关,下面给出了答案(您仅从第一行结果中读取)。另一个问题是,您无意中让人们能够通过直接读取SQL查询中的文本输入来编辑您的数据库。有人可以在文本框中键入;删除表用户--代码>如果你有那张表,你的数据库将执行指令。哦,好的,我知道你刚才说的,这是一个sql注入先生,你能不能发布一些关于如何使用foreach迭代数据库的例子,我将试着研究一下。举个例子,下面的KernelMode中的答案就是您想要的答案。foreach(cfgotcall.tbl.Rows中的var row)…是的,这是一个过期的作业,我也同意这对我作为一名学生没有任何好处,因为我现在所做的将反映我以后的职业生涯。我只是不善于分析代码和调整它们