2009-08-17 6 views
1

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.

+0

Bitte, versuchen Sie den Code zu formatieren Sie veröffentlichen. Wie kann jemand das lesen? –

+0

Nun, da es formatiert wurde, sollten Sie Ihre negative Bewertung rückgängig machen. –

+2

Sind Sie sicher, dass das Problem im T-SQL liegt? Haben Sie versucht, die gespeicherte Prozedur im SQL Management Studio auszuführen? – Zyphrax

Antwort

1

gibt es keinen Grund für SQL Server, dies zu tun. Es ist höchstwahrscheinlich ein Problem mit dem Code, der die gespeicherte Prozedur aufruft.

EDIT
die rufende Anwendungscode, um auszuschließen, versuchen Sie dies von SQL Server Management Studio:

EXEC sp_Poll_UpdateQandAs2 
    @POLL_ID = your_number_here 
    ,@NAME = 'my test "question"' 
    ,@QUESTION= 'will a question with "double quotes" work, even ''single quotes''?' 
    ,@OPT1 = 'with out a ''doubt'', "yes" it will' 
    ,@OPT2 = 'no way, "no" chance' 
    ,@OPT3 = 'maybe' 
    ,@OPT4 = NULL 
    ,@OPT5 = NULL 
    ,@OPT6 = NULL 
    ,@OPT7 = NULL 
    ,@OPT8 = NULL 
    ,@OPT9 = NULL 
    ,@VOTES1 = 100 
    ,@VOTES2 = 0 
    ,@VOTES3 = 0 
    ,@VOTES4 = 0 
    ,@VOTES5 = 0 
    ,@VOTES6 = 0 
    ,@VOTES7 = 0 
    ,@VOTES8 = 0 
    ,@VOTES9 = 0 
+0

@KM: Du hast Recht. Es ist nichts falsch mit meiner gespeicherten Prozedur. – burnt1ce