通过C#代码将文件路径字符串插入SQL数据库

本文关键字:字符串 插入 SQL 数据库 路径 文件 代码 通过 | 更新日期: 2023-09-27 18:25:23

在SQL中:

INSERT INTO [dbo].[tblFiles]
           ([FullFilePath]
           ,[LastModified])
     VALUES
           ('P:'test'test.csv', 
           null)

这将在数据库中存储完整路径:)但是,我需要在代码中执行此操作。

    SqlConnection connection = new SqlConnection(DatabaseHelper.ConnectionString);
    connection.Open();
    SqlCommand command = new SqlCommand( "stpInsertFile", connection);
    command.CommandType = System.Data.CommandType.StoredProcedure;
    command.Parameters.Add(new SqlParameter("@filepath", System.Data.SqlDbType.VarChar));
    command.Parameters["@filepath"].Value = article.FullFilePath;
    command.Parameters.Add(new SqlParameter( "@LastModified", System.Data.SqlDbType.DateTime));
    command.Parameters["@LastModified"].Value = article.LastModified;

    int newArticleID = Convert.ToInt32((decimal)command.ExecuteNonQuery());
    command.Dispose();
    connection.Close();
    connection.Dispose();
    return newArticleID;

这样,我得到的只是完整路径列中的"p"。所以我尝试使用LINQ,得到了同样的结果。

   public int InsertArticleUsingLINQ(tblFile article) {
            DataClassesDataContext context = new DataClassesDataContext();
                tblFile newFileEntry = new tblFile();
                newFileEntry.FullFilePath = article.FullFilePath;
                newFileEntry.LastModified = article.LastModified;
                context.tblFiles.InsertOnSubmit(newFileEntry);
                context.SubmitChanges();
                return newFileEntry.ID;
        }

在将字符串传递给数据库插入函数之前,我不会对其执行任何操作。我读到你需要转义反斜杠,但它似乎在引号上转义。另外请阅读sql之前需要一个@符号,但如何将其添加到参数中?

通过C#代码将文件路径字符串插入SQL数据库

警告:由于您没有共享存储过程代码,这只是一个猜测

您是否在存储过程的定义中设置了@filePath参数的大小?

如果您声明为:

create procedure stpInsertFile
    @filepath     varchar,
    @LastModified datetime
as
...

那么由于varchar数据类型的默认行为,您的参数被创建为varchar(1),这将产生您得到的结果
请查看ms网站上的char和varchar数据类型的参考文档。

如果stpInsertFile是存储过程,则必须在代码中设置:

...
 command.CommandType = CommandType.StoredProcedure;

否则,您必须在命令中设置查询字符串:

 SqlCommand command = new SqlCommand( "INSERT INTO [dbo].[tblFiles] ([FullFilePath] [LastModified])  VALUES  (@filepath,@LastModified)", connection);
...

在上述选项中,ADO代码没有复制完整路径,即使手动添加引号也是如此。我所得到的只是数据库中的一个字符。

经进一步检查,参数的类型为Varchar(1)!!!我把这个改成了Varchar(255),它起作用了。

请注意,LINQ to SQL函数确实插入了完整路径,因为它没有使用存储过程。

为这个错误道歉。