我正在使用针对SQL Server 2008数据库文件的C#和Linq-to-SQL应用程序。我的数据库不在SQL Server中,而是在我的项目文件夹中。
我的连接字符串是
<add name="WindowsFormsApplication1.Properties.Settings.OpticaConnectionString"
connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory| \Optica.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
providerName="System.Data.SqlClient" />
我使用Windows身份验证从C#访问SQL Server,每次运行应用程序时.mdf
文件都会复制到输出文件夹。
我有一个备份数据库的存储过程。在SQL Server中执行该过程成功完成,但是当我尝试从C#调用此过程时,会发生以下错误
数据库&#39; optica.mdf&#39;不存在。确保正确输入名称。 BACKUP DATABASE异常终止。
尽管数据库名称optica.mdf
甚至不是该过程的参数。
我发现了一个类似的主题,但它讨论了从C#linq立即执行SQL代码,这不是我的情况。
这是我的存储过程
USE [OPTICA.MDF]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[Sp_OpticaDatabaseBackup]
@Path varchar(1024),
as
Begin
DECLARE @fileName VARCHAR(256) -- file name for backup
DECLARE @fileDate VARCHAR(20) -- used for file name
SELECT @fileDate = replace(CONVERT(VARCHAR(20),GETDATE(),126),':','-')
SET @fileName = @Path + 'Pts_' + @fileDate + '.BAK'
BACKUP DATABASE [optica.mdf] TO DISK = @fileName
End
这是C#linq调用代码段
public int backupDatabase(string path)
{
int res = -1;
DataClasses1DataContext dc = new DataClasses1DataContext();
尝试
{
dc.Sp_OpticaDatabaseBackup(路径);
res = 1;
}
catch(Exception ex)
{
}
return res;
}
这里是异常发生的地方
[Function(Name="dbo.Sp_OpticaDatabaseBackup")]
public int Sp_OpticaDatabaseBackup([Parameter(Name="Path", DbType="VarChar(1024)")] string path, [Parameter(Name="DB", DbType="VarChar(1024)")] string dB)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), path, dB);
return ((int)(result.ReturnValue));
}
有什么想法吗?
提前致谢。