【发布时间】:2013-11-14 09:27:06
【问题描述】:
相当具体的问题。 我正在制作一个检测文件的程序。当有一个具有特定名称的新文件时,它会将其保存到服务器。这工作正常。问题是,它保存的变量之一是一个唯一的数字,它应该随着它上传的每个文件而增加。 所以第一个文件的唯一编号为 400,下一个文件的唯一编号为 401,依此类推。
我将一个测试文件上传到服务器,所以已经有一个唯一编号为 400 的文件。 我现在想要的是我的下一个文件应该有下一个数字。 为此,它必须从第一列的最后一个单元格中获取数字。 我发现 SQL 语句是 SELECT TOP 1 * FROM EKG_Temp ORDER BY ekgmaaleid DESC。 我已经对包含 SQL 语句的命令 loadCMD 进行了注释。
表的名称是 EKG_Temp。列的名称是 ekgmaaleid,类型是 BigInt
我有兴趣将 ekgmaaleid 列中的最后一个单元格保存为我的程序中的变量,以供以后使用。
public void SaveFile(string fileName, byte[] BlobValue)
{
string fullPath = (folder + "/" + fileName);
fileExtension = fileName.Substring(fileName.Length - 3);
if (saveBool == true)
{
SqlConnection con = new SqlConnection(@"Data Source=Irrelavant");
SqlCommand SaveCmdTemporary = new SqlCommand("insert into EKG_Temp(ekgmaaleid,dato,borger_cprnr,raa_data,maaleformat_type) values(@ekgmaaleid,@dato,@borger_cprnr,@raa_data,@maaleformat_type)", con);
//SqlCommand SaveCmdPermanent = new SqlCommand("insert into EKG_Temp(ekgmaaleid,dato,borger_cprnr,raa_data,maaleformat_type) values(@ekgmaaleid,@dato,@borger_cprnr,@raa_data,@maaleformat_type)", con);
//SqlCommand LoadCmd = new SqlCommand("SELECT TOP 1 * FROM EKG_Temp ORDER BY ekgmaaleid DESC", con); //Husk at den faktisk skal vælge måleid ud fra EKG_Gemt i virkeligheden
SqlParameter ekgmaaleidParam = new SqlParameter("@ekgmaaleid", SqlDbType.BigInt);
SqlParameter datoParam = new SqlParameter("@dato", SqlDbType.DateTime);
SqlParameter borger_cprnrParam = new SqlParameter("@borger_cprnr", SqlDbType.NVarChar, 50);
SqlParameter raa_dataParam = new SqlParameter("@raa_data", SqlDbType.VarBinary, -1);
SqlParameter maaleformat_typeParam = new SqlParameter("@maaleformat_type", SqlDbType.NVarChar, 10);
SqlParameter loadMaaleIDParam = new SqlParameter("@ekgmaaleid", SqlDbType.BigInt);
con.Open();
SaveCmdTemporary.Parameters.Add(ekgmaaleidParam);
SaveCmdTemporary.Parameters.Add(datoParam);
SaveCmdTemporary.Parameters.Add(borger_cprnrParam);
SaveCmdTemporary.Parameters.Add(raa_dataParam);
SaveCmdTemporary.Parameters.Add(maaleformat_typeParam);
//LoadCmd.Parameters.Add(loadMaaleIDParam);
datoParam.Value = dato;
borger_cprnrParam.Value = cpr;
raa_dataParam.Value = BlobValue; //Kommer fra metoden FileCreated.
maaleformat_typeParam.Value = fileExtension;
try
{
SaveCmdTemporary.Connection.Open();
SaveCmdTemporary.ExecuteNonQuery();
MessageBox.Show("File saved to database.", "BLOB Saved", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Save Failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
SaveCmdTemporary.Connection.Close();
saveBool = false;
}
}
}
这是数据库的图片以及我希望它做什么。
提前致谢。
【问题讨论】:
-
你需要在你的表字段上寻找身份规范:它会为你增加数字......然后如果你真的需要从你的代码生成的最后一个 id,那么得到它很简单。请注意,如果您打算向用户提供文件,您至少应该有另一个标识符,这样任何人都无法获得他不打算仅通过用户另一个号码获得的文件。另请注意,最好将用户上传的文件存储在 webroot 之外。
-
观察:连接和命令为
IDisposable;使用using可以节省很多风险 -
那么您的问题到底是什么?您已经提到了必须执行的 SELECT TOP 1 语句才能获得最新数字...然后您可以在 INSERT 语句中使用它...不好但应该可以...
-
@PrfctByDsgn 我想要类似的东西; ekgmaaleidParam.Value= TheValueILoadedFromLoadCmd + 1;我不知道如何从命令 LoadCmd 中提取该值。
-
尝试:int id = (int)LoadCmd.ExecuteScalar();
标签: c# sql-server load save