我目前正在ASP.NET MVC中的第一年实习页面上工作:它让员工输入花费的小时数(0到8)特定项目每月每天。在我的ASP.NET MVC页面中SQL INSERT失败后的命令
界面,显示,选择和形式发送似乎是现在的工作 - 但一旦我做我的SQL请求似乎在这里阻止:
foreach (string s in sDays)
{
string[] values = s.Split(' ');
string strQuery = "INSERT INTO UserActivity (CalendarDate,ProjectId,Login,TaskId,ActivityTypeId,Cost) VALUES (";
strQuery += "'" + (new DateTime(iYear, iMonth, int.Parse(values[1]))).ToString("yyyy/MM/dd") + "'"; //We 2 donne [0] We et [1] 2
strQuery += " , " + iProjectid;
strQuery += " , '" + sLogin + "'";
strQuery += " , NULL";
strQuery += " , 0";
strQuery += " , " + datas[i++];
strQuery += ")";
mDB_DataAdapter = new OleDbDataAdapter(strQuery, m_strConnectionString);
mDB_DataAdapter.Fill(mDB_DataSet, "UserActivity"); // Right here !
mDB_DataAdapter = null;
System.Threading.Thread.Sleep(50);
}
,并直接向我发送到:
catch (Exception ex) // The 'System.Data.SqlClient' provider is not registered on the local machine.
{
bRet = false;
}
怎么来的命令
mDB_DataAdapter.Fill(mDB_DataSet, "UserActivity");
使得它失败?请注意,大部分代码不是我的,并且是最后一个实习生,我只是在纠正错误。
这里是我的ConnectionStrings我的web.config的部分:
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-CRAWebSiteMVC-20131119145412;Integrated Security=SSPI" providerName="System.Data.SqlClient" />
<add name="CRA" connectionString="metadata=res://*/Models.CRA.csdl|res://*/Models.CRA.ssdl|res://*/Models.CRA.msl;provider=System.Data.SqlClient;provider connection string="data source=MMSDEVNEW\SQL2008;initial catalog=CRAV34;persist security info=True;user id=sa;password=as0;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
<add name="CRAEntities" connectionString="metadata=res://*/Models.CRA.csdl|res://*/Models.CRA.ssdl|res://*/Models.CRA.msl;provider=System.Data.SqlClient;provider connection string="data source=MMSDEVNEW\SQL2008;initial catalog=CRAV34;persist security info=True;user id=sa;password=as0;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
<add name="CRAV34Entities" connectionString="metadata=res://*/Models.CRA.csdl|res://*/Models.CRA.ssdl|res://*/Models.CRA.msl;provider=System.Data.SqlClient;provider connection string="data source=MMSDEVNEW\SQL2008;initial catalog=CRAV34;persist security info=True;user id=sa;password=as0;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
而且m_strConnectionString的初始化:
public UserActivityDb(string strConnectionString)
{
m_strConnectionString = strConnectionString;
}
m_strConnectionString包含我的连接字符串:
metadata=res://*/Models.CRA.csdl|res://*/Models.CRA.ssdl|res://*/Models.CRA.msl;provider=System.Data.SqlClient;provider connection string=\"data source=MMSDEVNEW\\SQL2008;initial catalog=CRAV34;persist security info=True;user id=sa;password=as0;multipleactiveresultsets=True;App=EntityFramework\
是什么剩下要做的就是保存表单发送的输入s显示在页面上。
感谢您的帮助。
编辑:
替换为以下整个的OleDb nonesense:
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(m_strConnectionString);
conn.Open();
System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand(strQuery, conn);
comm.ExecuteNonQuery();
就像一个魅力(显然),但它不显示信息,我现在必须弄清楚如何在我的Db中显示存储的信息。
你在'catch'上放置了一个断点来看看'Exception ex'中的错误是什么? – scgough
不要用字符串连接组成你的SQL命令。 [改用参数](https://msdn.microsoft.com/en-us/library/ms254953(v = vs.110).aspx)。 – Konamiman
[** USE PARAMETERISED QUERIES !!! **](http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/),如果你不离开自己对恶意SQL注入攻击开放,格式错误的SQL(这可能是导致您的异常的原因),数据转换/截断错误,以及您无法使用缓存的查询计划,强制在每次执行时重新编译查询。总之,使用字符串连接来组成SQL语句没有任何好的理由。 – GarethD