עבור לתוכן

עזרה בהכנסת תאריך ושעה לשדה מסוג DateTime ב MS-SQL SERVER דרך AS

Featured Replies

פורסם

אני מנסה באחד הפרוייקטים שאני מתכנת ב asp.net להכניס אל תוך שדה מסוג DateTime בבסיס הנתונים שלי שהוא MS SQL SERVER את הערך של הזמן והתאריך הנוכחי באמצעות השיטה/פונקציה DatwTime.Now אך לצערי משפט ה SQL שלי נופל ופעולת ה insert לא מתבצעת.

"insert into mytable(userid,edittime) values('3232'," & DateTime.Now() & ")"

נסתי גם לתחום את זה בגרשים כאילו זה ערך מחרוזתי וגם זה לא עזר.

כיצד אני יכול לעשות זאת באופן שזה כן יעבוד ויקבל את התאריך והשעה ויכניסם לבסיס הנתונים? ???

אגב בהתחלה עשיתי זאת אוטומאטית בצד ה SQL SERVER ע"י שימוש בפונקציה gatdate המובנת אך לצערי זה לא הכי מתאים לי בגלל ששרת ה SQL שלי הוא לא אותו שרת שעליו יושב IIS ועל כן יתכן וישנם הפרשי זמנים ביניהם מה שמהווה לי בעיה בהמשך הקוד שאני כותב.

כמו כן מדובר על שרתים שיתופיים היושבים בחברת איחסון כך שגם אין לי יותר מידי אפשרויות שליטה עד לרמות האלו של ההגדרות הפיזיות בשרתים.

אודה לעזרתכם בנידון,

חיפושי בגוגל לצערי לא הועילו ולא עזרו אבל אולי אתם כן.

ואסיים זאת בברכת שנה טובה לכל חברי הפורום ומשפחותיהם ולכל בית ישראל ועם ישראל.

פורסם

תנסה


"insert into mytable(userid,edittime) values('3232','" & DateTime.Now() & "')"

כיאלו תיתחום את התאריך בגרשים אם זה לא עובד תיתחומם את התאריך בסולמיות #

בהצלחה

פורסם

הגישה שלך כולה מוטעית בדרך שאתה מעדכן database מתוך קוד ב- ASP.NET

עדיף שתשתמש בקלאסים DataSet , SqlDataAdapter ו- SqlCommand על מנת לבצע עדכונים

פורסם
  • מחבר

בסוף פתרתי את הבעיה בדרך אחרת.

הגישה שלך כולה מוטעית בדרך שאתה מעדכן database מתוך קוד ב- ASP.NET

עדיף שתשתמש בקלאסים DataSet , SqlDataAdapter ו- SqlCommand על מנת לבצע עדכונים

לדבריך אלו הם הכן קלאסים ואובייקטים לטיפול בנתונים וחיבור לבסיס נתונים מסוג SQL SERVER אבל בסוף גם כשאני עושה בהם שימוש כי בשורה התחתונה אין ממש דרך אחרת אתה מגיע לכך שאתה כותב שאילתת SQL עם זה לשליפה ואם זה לעדכון/מחיקה/הוספה.

פורסם

לא נכון

אם תרצה אוכל להסביר לך יותר בפירוט

אבל הרעיון בגדול היא להציא מהקוד שלך כל משפט SQL שהוא

ולאחסן אותם ב- database כ- Stored Procedures

פורסם
  • מחבר

קצת באיחור אבל אני אשמח לשמוע הסבר מפורט יותר מימך.

תודה ושנה טובה.

פורסם

ב- Database שלך אתה כותב את ה- Stored Procedure שלך , למשל לפי הדוגמא שהצגת:

CREATE PROCEDURE InsertIntoTable1
(
@userid int,
@edittime datetime
)
AS
insert into
table1
(
userid,
edittime
)
values
(
@userid,
@edittime
)

RETURN

והקוד שלך יראה משהו כזה:

    public static void AddUser(int userid)
{
SqlConnection cn1 = new SqlConnection("server=myserver;database=mydb;Integrated Security=SSPI");
SqlCommand cmd1 = new SqlCommand("InsertIntoTable1", cn1);
cmd1.CommandType = System.Data.CommandType.StoredProcedure;
cn1.Open();
SqlCommandBuilder.DeriveParameters(cmd1);
cmd1.Parameters["@userid"].Value = userid;
cmd1.Parameters["@edittime"].Value = DateTime.Now;
int hr = cmd1.ExecuteNonQuery();
cn1.Close();
}

לא רציתי לסבך אותך עם דוגמא שכוללת SqlAdapter ו- DataSets , אלה מתאימים יותר לאופי עבודה באצווה (אם אתה מכיר את המילה או batch בלעז)

כלומר שלמשתמש יש מסך בו הוא עושה הרבה עדכונים מבלי להתחבר ל- database לוחץ על איזשהו כפתור save ורק אז כל השינויים שלו נשמרים

פורסם
  • מחבר

וזה נראה לך הגיוני שעבור כל שאילתה שאני רוצה לבצע אם זה שליפה ואם זאת הכנסה אני אכתוב stored procedure?

במקום לבצע את השאילות ישירות מה ASP.NET מתי והיכן שאני צריך?

אני משתמש בקלאס הבא שכתבנו בפרוייקט.



Public Class sqlstatement

Public Shared Function sqlret(ByVal sqlstring As String)
Dim constr As String = ConfigurationSettings.AppSettings("connstring")
Dim dbconn As New SqlConnection(constr)
Dim myadapter As New SqlDataAdapter(sqlstring, dbconn)
dbconn.Open()
Dim ds As New DataSet
myadapter.Fill(ds)
dbconn.Close()
Return ds

End Function

Public Shared Function sqlins(ByVal sqlstring As String)
Dim constr As String = ConfigurationSettings.AppSettings("connstring")
Dim dbconn As New SqlConnection(constr)
dbconn.Open()
Dim mysqlcommand As New SqlCommand(sqlstring, dbconn)
mysqlcommand.ExecuteNonQuery()
mysqlcommand.CommandText = "SELECT SCOPE_IDENTITY()"
Dim id As String = Convert.ToString(mysqlcommand.ExecuteScalar())
dbconn.Close()
Return id
End Function
End Class
Imports System.Data.SqlClient

פורסם

וזה נראה לך הגיוני שעבור כל שאילתה שאני רוצה לבצע עם זה שליפה ואם זאת הכנסה אני אכתוב stored procedure?

במקום לבצע את השאילות ישירות מה ASP.NET מתי והיכן שאני צריך?

זה לא שלכל שאילתא אתה צריך לכתוב SP

לכל סוג של שאילתא שאתה משתמש בה אתה מכין SP ופשוט מכניס לה את המשתנים הרלוונטים.

מה שכן, להכנסה של שורה בודדת באמת אין צורך ב-SP. בעיקר משתמשים בזה כאשר אתה רוצה לבצע פעולות מיון מסובכות ולשלוף רק את המידע הרלוונטי.

פורסם
  • מחבר

אני מסכים שהכן שאילתות מסובכות הכן עדיף לפעמים לעשות בצד שרת ה SQL באמצעות SP מאשר דרך ה ASP.NET אבל לא עבור כל שאילתה להשתמש ב SP.

פורסם

אני מסכים שהכן שאילתות מסובכות הכן עדיף לפעמים לעשות בצד שרת ה SQL באמצעות SP מאשר דרך ה ASP.NET אבל לא עבור כל שאילתה להשתמש ב SP.

תקרא קצת על נושא שנקרא SQL Injection ותבין למה לא מומלץ לשים משפטי SQL בתוך הקוד המקומפל

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים