Wenn ich die pollQuestion- und pollName-Spalte aktualisiere, die doppelte Anführungszeichen enthalten, die das gespeicherte Proc unten verwenden, speichert es die Anführungszeichen richtig. Bei den Spalten option1, ..., option9 speichert der gespeicherte proc jedoch keine doppelten Anführungszeichen oder Zeichen nach den Anführungszeichen. Es ist, als ob SQL Server die Zeichenfolge bei den Anführungszeichen vorzeitig abschneidet. Ich habe eine Ahnung, dass QUOTED_IDENTIFIER etwas mit diesem Problem zu tun hat, aber es erklärt NICHT die Inkonsistenz, die ich mit pollQuestion und pollName und option1, ..., option9 habe.SQL Server 2005 schneidet Zeichenfolgen in doppelten Anführungszeichen ab
Frage: Warum aktualisiert SQL Server 2005 die Spalten option1, ..., option9 mit Strings, die an den doppelten Anführungszeichen abgeschnitten sind? (Ex: Saving „Hallo \“ World Hallo „„auf option1 würde gerettet werden“)
set ANSI_NULLS OFF
set QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[sp_Poll_UpdateQandAs2]
@POLL_ID INT,
@NAME VARCHAR(140) = NULL,
@QUESTION VARCHAR(300),
@OPT1 VARCHAR(150),
@OPT2 VARCHAR(150),
@OPT3 VARCHAR(150)= NULL,
@OPT4 VARCHAR(150)= NULL,
@OPT5 VARCHAR(150)= NULL,
@OPT6 VARCHAR(150)= NULL,
@OPT7 VARCHAR(150)= NULL,
@OPT8 VARCHAR(150)= NULL,
@OPT9 VARCHAR(150)= NULL,
@VOTES1 INT = 0,
@VOTES2 INT = 0,
@VOTES3 INT = 0,
@VOTES4 INT = 0,
@VOTES5 INT = 0,
@VOTES6 INT = 0,
@VOTES7 INT = 0,
@VOTES8 INT = 0,
@VOTES9 INT = 0
AS
UPDATE tTREpoll2 SET
pollName = @NAME,
pollQuestion = @QUESTION,
option1 = @OPT1,
option2 = @OPT2,
option3 = @OPT3,
option4 = @OPT4,
option5 = @OPT5,
option6 = @OPT6,
option7 = @OPT7,
option8 = @OPT8,
option9 = @OPT9,
votes1 = @VOTES1,
votes2 = @VOTES2,
votes3 = @VOTES3,
votes4 = @VOTES4,
votes5 = @VOTES5,
votes6 = @VOTES6,
votes7 = @VOTES7,
votes8 = @VOTES8,
votes9 = @VOTES9
WHERE pollID = @POLL_ID
UPDATE: Die Menschen sind zu raten, dass es der Code ist, dass die gespeicherte Prozedur ruft die Schuldige ich bezweifeln. es ist aber hier ist die C#, die es tut.
public static void UpdatePoll(PollObj savedPoll)
{
Database db = DatabaseFactory.CreateDatabase("ControlPanelSqlServer");
using (DbCommand cmd = db.GetStoredProcCommand("sp_Poll_UpdateQandAs2"))
{
db.AddInParameter(cmd, "POLL_ID", DbType.String, savedPoll.PollID);
db.AddInParameter(cmd, "QUESTION", DbType.String, savedPoll.Question);
db.AddInParameter(cmd, "NAME", DbType.String, savedPoll.Name);
for (int i = 0; i < MAX_NUMBER_OF_CHOICES; i++)
{
if (i < savedPoll.Answers.Count)
{
db.AddInParameter(cmd, "OPT" + (i + 1), DbType.String, savedPoll.Answers[i].Option);
db.AddInParameter(cmd, "VOTES" + (i + 1), DbType.Int32, savedPoll.Answers[i].NumVotes);
}
else
{
db.AddInParameter(cmd, "OPT" + (i + 1), DbType.String, null);
db.AddInParameter(cmd, "VOTES" + (i + 1), DbType.Int32, 0);
}
}
if (db.ExecuteNonQuery(cmd) <= 0)
{
throw new Exception("Could not save changes with given the Poll_ID:" + savedPoll.PollID);
}
}
}
Update # 2
ich das Problem gefunden, und es ist nicht der Code, den ich geschrieben habe. die Datenbank tatsächlich w Orks und macht, was ich will. Das Problem, das ich hatte, ist die Art, wie eine meiner aspx-Seiten die gespeicherten Ergebnisse liest. Es hat HtmlEncoded die gespeicherten Daten nicht richtig zu einem Eingabe-Tag, so dass die doppelten Anführungszeichen schließlich die Eingabe-Tag an den Anführungszeichen begrenzt.
Bitte, versuchen Sie den Code zu formatieren Sie veröffentlichen. Wie kann jemand das lesen? –
Nun, da es formatiert wurde, sollten Sie Ihre negative Bewertung rückgängig machen. –
Sind Sie sicher, dass das Problem im T-SQL liegt? Haben Sie versucht, die gespeicherte Prozedur im SQL Management Studio auszuführen? – Zyphrax