【发布时间】:2013-06-10 23:18:20
【问题描述】:
我正在使用 SQL Server Compact 4.0 并将站点托管在 Windows Home Server 2011 上,程序是用 C# - Visual Web Developer 编写的。
我已经尝试了我能想到的所有可能的连接字符串变体,但我不断收到此错误:
初始化字符串的格式不符合从索引 0 开始的规范。
这是我目前拥有的字符串
<add name="Inventory"
connectionString="Data Source=C:\Program Files\Windows Server\Bin\WebApps\Site\App_Data\PHSInventory.sdf;" / >
我也尝试用|data directory| 指向它。我已经用完了谷歌上的蓝色链接来点击。
堆栈跟踪
[ArgumentException: 初始化字符串的格式不符合从索引 0 开始的规范。] System.Data.SqlServerCe.ConStringUtil.GetKeyValuePair(Char[] connectionString, Int32 currentPosition, String& key, Char[] valuebuf, Int32& vallength, Boolean& isempty) +1182 System.Data.SqlServerCe.ConStringUtil.ParseStringIntoHashtable(字符串 conString,哈希表值)+188 System.Data.SqlServerCe.ConStringUtil.ParseConnectionString(字符串和连接字符串)+128 System.Data.SqlServerCe.SqlCeConnection.set_ConnectionString(字符串值)+679 System.Data.SqlServerCe.SqlCeConnection..ctor(字符串连接字符串)+46 System.Data.SqlServerCe.SqlCeDataAdapter..ctor(字符串选择命令文本,字符串选择连接字符串)+73 DataAccess.FillDataTable(String SQL) +149 Default.Page_Load(Object sender, EventArgs e) +378 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(对象发送者,EventArgs e)+51 System.Web.UI.Control.OnLoad(EventArgs e) +92 System.Web.UI.Control.LoadRecursive() +54 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772
数据访问
using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.Configuration;
using System.Data.SqlServerCe;
public class DataAccess
{
private int count = -1;
public int Count
{ get { return count; } }
private string connectionString;
public string ConnectionName
{
set
{
if (WebConfigurationManager.ConnectionStrings[value] == null)
{
throw new Exception("Cannot find connection string named '" +
value + "' in web.config");
}
//Retrieve connection string from web.config.
connectionString =
WebConfigurationManager.ConnectionStrings[value].ConnectionString;
}
}
public DataAccess(string connectionName)
{
ConnectionName = connectionName;
}
public DataTable FillDataTable(string SQL)
{
// Fill dataTable.
WriteToTraceLogForDebugging(SQL);
SqlCeConnection sqlConn = new SqlCeConnection("Data Source=D:\\InventoryData\\PHSInventory.sdf;");
SqlCeDataAdapter objAdapter = new SqlCeDataAdapter(SQL, sqlConn);
DataTable dt = new DataTable();
objAdapter.Fill(dt);
count = dt.Rows.Count;
return dt;
}
public int ExecuteNonQuery(string SQL)
{
WriteToTraceLogForDebugging(SQL);
SqlCeConnection sqlConn = new SqlCeConnection(connectionString);
sqlConn.Open();
SqlCeCommand objCmd = new SqlCeCommand(SQL, sqlConn);
count = objCmd.ExecuteNonQuery();
return count;
}
public object ExecuteScalar(String SQL)
{
WriteToTraceLogForDebugging(SQL);
SqlCeConnection sqlConn = new SqlCeConnection(connectionString);
sqlConn.Open();
SqlCeCommand objCmd = new SqlCeCommand(SQL, sqlConn);
//calling code needs to cast data (to integer, string, double, etc.) upon receipt.
return objCmd.ExecuteScalar();
}
private void WriteToTraceLogForDebugging(string sql)
{
System.Web.HttpContext.Current.Trace.Write("sql****", sql);
System.Web.HttpContext.Current.Trace.Write("CONNECTION*****", connectionString);
}
}
【问题讨论】:
-
你的连接字符串不应该被引号包围吗?我猜你必须转义内部引号。
-
您的应用程序使用的是什么版本的 Visual Studio / C# / .NET?您能否在 Visual Studio 的服务器资源管理器窗口中加载数据库并从其表中查询数据?
-
试试
<add name="Inventory" connectionString="Data Source=&quot;C:\Program Files\Windows Server\Bin\WebApps\Site\App_Data\PHSInventory.sdf;&quot;" /> -
试过了,同样的错误!
标签: c# sql sql-server-ce connection-string