Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从SQL中获取列中的最后一个单元格_C#_Sql Server_Load_Save - Fatal编程技术网

C# 从SQL中获取列中的最后一个单元格

C# 从SQL中获取列中的最后一个单元格,c#,sql-server,load,save,C#,Sql Server,Load,Save,这是一个相当具体的问题。 我正在制作一个检测文件的程序。当有具有特定名称的新文件时,它会将其保存到服务器。这个很好用。问题是,它保存的变量之一是一个唯一的数字,对于它上载的每个文件,这个数字都应该增加。 因此,第一个文件具有唯一编号400,下一个文件具有唯一编号401,依此类推 我上传了一个测试文件到服务器,所以已经有了第一个唯一编号为400的文件。 我现在想要的是我的下一个文件应该有下一个编号。 为此,它必须从第一列的最后一个单元格中获取数字。 我发现SQL语句是由EKgmaleid DESC

这是一个相当具体的问题。 我正在制作一个检测文件的程序。当有具有特定名称的新文件时,它会将其保存到服务器。这个很好用。问题是,它保存的变量之一是一个唯一的数字,对于它上载的每个文件,这个数字都应该增加。 因此,第一个文件具有唯一编号400,下一个文件具有唯一编号401,依此类推

我上传了一个测试文件到服务器,所以已经有了第一个唯一编号为400的文件。 我现在想要的是我的下一个文件应该有下一个编号。 为此,它必须从第一列的最后一个单元格中获取数字。 我发现SQL语句是由EKgmaleid DESC从EKG_临时订单中选择TOP 1*。 我的注释超过了loadCMD,它是包含SQL语句的命令

该表的名称为EKG_Temp。列的名称为ekgmaleid,类型为BigInt

我想将ekgmaleid列中的最后一个单元格作为变量保存在我的程序中,以便以后使用。

    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;
            }

        }
    }
这是数据库的图片以及我希望它做的事情


提前感谢。

正确的方法是使用
标识
列创建表;然后数据库将为您生成此值。在前面插入的标识值的值可通过
SCOPE_identity()
@@identity
获得(首选前者-尤其是在有触发器的情况下;后者适用于更多的数据库版本,但有边缘情况)


在多用户数据库上,这也避免了竞争条件的问题(显然只有一个连接知道最近的插入)。您只需更改
insert
命令,以不指定
identity
列(数据库将提供此值;您不必这样做)。

您需要在表字段中查找identity specification:它将为您增加数字。。。然后,如果您确实需要从代码生成的最后一个id,那么获取它非常简单。请注意,如果您打算向用户提供文件,您至少应该有另一个标识符,以便任何人都不能通过用户的另一个号码获取他不打算获取的文件。请注意,最好将用户上传的文件存储在webroot之外。注意:连接和命令是
IDisposable
;使用
使用
将节省大量风险那么您的问题到底是什么?您已经提到了要获取最新编号必须执行的SELECT TOP 1语句。。。然后您可以在INSERT语句中使用它。。。不太好,但应该有用…@PrfctByDsgn我想要这样的东西;ekgmaaleidParam.Value=从LoadCmd+1读取的值;我不知道如何从命令LoadCmd.try中提取该值:int id=(int)LoadCmd.ExecuteScalar();我会尽量不轻率;虽然我很感激你的回答,而且可能是正确的,但不幸的是我不能使用它——因为我不允许再做任何专栏。(这是一个赋值)您不必再添加任何列,只要将ekgmaleid的标识规范设置为Yes,前提是它是整数或UUID类型。正如Marc所说,以这种方式自己设置这个值意味着你的应用程序不是多用户安全的。顺便提一下,有一个比SCOPE_IDENTITY&@@IDENTITY更好的选项,即使用insert语句的OUTPUT子句。如插入到。。。输出插入的.ekgmaleid值。。。。