У меня есть ключ без ключа (это не моя работа), и я пытаюсь использовать raw sql для вставки строки данных. Я попытался сопоставить хранимую процедуру, но у меня была такая же проблема с датой.Неверный формат даты SQL-строки структуры Entity.
internal bool InsertSession(Guid UserID, DateTime LastActivityDate, string SessionID)
{
string s = "INSERT INTO aspnet_Custom_UserSessionActivity VALUES (" + "'" + UserID.ToString() + "'" + " ," + LastActivityDate.ToString("yyyy-MM-dd HH:mm:ss") + "," + "'" + SessionID.ToString() + "')";
try
{
using (ALFDataContext)
{
ALFDataContext.Database.ExecuteSqlCommand(s);
ALFDataContext.SaveChanges();
return true;
}
}
catch (Exception ex)
{
return false;
}
}
Это то, что строка s содержит:
INSERT INTO aspnet_Custom_UserSessionActivity VALUES ('f4da4c0b-d94e-4f9c-84ef-c82fa442bbc1' ,2014-02-04 09:48:43,'wj4gesi3bdqytflifnzyqx2c')
и это ошибка:
Incorrect syntax near '09'.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at System.Data.Objects.ObjectContext.ExecuteStoreCommand(String commandText, Object[] parameters)
at System.Data.Entity.Internal.InternalContext.ExecuteSqlCommand(String sql, Object[] parameters)
at System.Data.Entity.Database.ExecuteSqlCommand(String sql, Object[] parameters)
at MembershipProvider.DataAccess.Repository.InsertSession(Guid UserID, DateTime LastActivityDate, String SessionID) in c:\Users\nickgowdy\Documents\Visual Studio 2012\Projects\ALF source code\ALF\branches\Nick's Branch\MembershipProvider\DataAccess\Repository.cs:line 149
Я предполагаю, что мой формат даты неправильно, но я не могу увидеть ошибку ,
У кого-нибудь есть предложения по его устранению?
Ну, вам просто удалось доказать, что ORM не защищают автоматически от [SQL Injection] (http://www.troyhunt.com/2013/07/everything-you-wanted-to-know-about -sql.html)! –