通过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之前需要一个@符号,但如何将其添加到参数中?
警告:由于您没有共享存储过程代码,这只是一个猜测
您是否在存储过程的定义中设置了@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函数确实插入了完整路径,因为它没有使用存储过程。
为这个错误道歉。