在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之前需要@符号,但是如何将其添加到参数中?
答案 0 :(得分:1)
如果stpInsertFile
是存储过程,则必须在代码中设置:
...
command.CommandType = CommandType.StoredProcedure;
否则你必须在命令中设置查询字符串:
SqlCommand command = new SqlCommand( "INSERT INTO [dbo].[tblFiles] ([FullFilePath] [LastModified]) VALUES (@filepath,@LastModified)", connection);
...
答案 1 :(得分:1)
警告:由于您没有共享存储过程代码,这只是一个疯狂的猜测。
您是否在存储过程的定义中设置了@filePath
参数的大小?
如果您将其声明为:
create procedure stpInsertFile
@filepath varchar,
@LastModified datetime
as
...
然后你的参数被创建为varchar(1)
,因为varchar数据类型的默认行为会产生你得到的结果。
请在ms网站上查看reference documentation的char和varchar数据类型
答案 2 :(得分:0)
在上述选项中,即使手动添加引号,ADO代码也不会复制完整路径。我得到的只是数据库中的一个字符。
进一步检查时,参数的类型为Varchar(1)!!!我将其更改为Varchar(255)并且有效。
注意,LINQ to SQL函数确实插入了完整路径,因为它没有使用存储过程。
为错误道歉。