|
Hi,
Tnx for the reply and suggestions that helps me a lot.
Anyway, i created a solution that solves for my problem in master/detail relationship, but not really the best one. so here is the revised code as shown below:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace MasterChild
{
public partial class Form1 : Form
{
bool addIndicator = false;
DataSet ds = new DataSet();
int lastNoOfMasterId;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.masterTableAdapter.Fill(this.dsMaster.Master);
detailLoadValue();
lastno();
}
void lastno()
{
bnMoveLastItem.PerformClick();
lastNoOfMasterId = int.Parse(txtMasterId.Text);
}
void detailLoad()
{
try
{
this.detailTableAdapter.Fill(this.dsDetail.Detail, new System.Nullable<int>(((int)(System.Convert.ChangeType(lblMasterId.Text, typeof(int))))));
}
catch (System.Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
void detailLoadValue()
{
lblMasterId.Text = txtMasterId.Text;
detailLoad();
}
private void bindingNavigatorMoveNextItem_Click(object sender, EventArgs e)
{
detailLoadValue();
}
private void bindingNavigatorMoveLastItem_Click(object sender, EventArgs e)
{
detailLoadValue();
}
private void bindingNavigatorMovePreviousItem_Click(object sender, EventArgs e)
{
detailLoadValue();
}
private void bindingNavigatorMoveFirstItem_Click(object sender, EventArgs e)
{
detailLoadValue();
}
private void masterBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
this.Validate();
ds.EnforceConstraints = false;
this.masterBindingSource.EndEdit();
this.masterTableAdapter.Update(this.dsMaster.Master);
this.detailBindingSource.EndEdit();
this.detailTableAdapter.Update(this.dsDetail.Detail);
ds.EnforceConstraints = true;
addIndicator = false;
}
private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e)
{
if (addIndicator)
{
return;
}
else
{
detailLoadValue();
lastNoOfMasterId += 1;
addIndicator = true;
}
}
private void dgvDetail_RowEnter(object sender, DataGridViewCellEventArgs e)
{
if (addIndicator)
{
lblMasterId.Text = lastNoOfMasterId.ToString();
}
else
{
lblMasterId.Text = txtMasterId.Text;
}
}
}
}
So using the integer lastNoOfMasterId that detects the last number of MasterId and automatically incremented if the user press an add button, which is now a value of MasterId at Details datagrid, replacing the -1 default value during add. With this i am not having trouble now on null value of MasterId at details table and adding a new master along with its details is no longer a problem to me.
But i think this kind of code is much more complicated. Is there any simplified one aside from this?
tnx again for the suggestions.
Har
|
|
|
|
|
Greetings !
I am new to programming, iwant your help to creat an rss reader in C# using visual studio 2010.
thaks
|
|
|
|
|
|
You have posted a similar question in the .Net framework forums as well.
The funniest thing about this particular signature is that by the time you realise it doesn't say anything it's too late to stop reading it.
My latest tip/trick
Visit the Hindi forum here.
|
|
|
|
|
Abhinav S wrote: You have posted a similar question in the .Net framework forums as well.
Perhaps he's writing two applications, one using C# and one in a different CLI language (perhaps F#) and wants to compare and contrast the differences in approach and thinking. Or maybe he's just cross posting!
|
|
|
|
|
Errrmmmmmmm I call Occam's razor
|
|
|
|
|
This[^] article may help get you started.
/ravi
|
|
|
|
|
Hi guys,
I'm using the following code to restore a backup sql database with C# and SMO.
void RestoreDatabaseWithSMO(string sConnect, string dbName, string backUpPath)
{
using (SqlConnection cnn = new SqlConnection(sConnect))
{
cnn.Open();
cnn.ChangeDatabase("master");
ServerConnection sc = new ServerConnection(cnn);
Server sv = new Server(sc);
if (!sv.Databases.Contains(dbName))
throw new Exception("this DataBase does not exist");
BackupDeviceItem bdi = new BackupDeviceItem(backUpPath, DeviceType.File);
Restore resDB = new Restore();
resDB.PercentComplete += new PercentCompleteEventHandler(percentComplete);
resDB.PercentCompleteNotification = 10;
resDB.Devices.Add(bdi);
resDB.NoRecovery = false;
resDB.ReplaceDatabase = true;
resDB.Database = dbName;
resDB.Action = RestoreActionType.Database;
resDB.SqlRestore(sv);
}
}
but in the last line I got below exception !!!
{"Restore failed for Server '\\\\.\\pipe\\3F103E6E-3FD4-47\\tsql\\query'. "}
What's wrong with it ?
Could you please guide me?
Thanks
|
|
|
|
|
Hello everyone
I've generated an SQL statement in my .cs file as
cmd.Connection = conn //this is working, worked before in the same code
cmd.CommandText = "INSERT INTO <table> VALUES ('value1','value2')";
conn.Open
cmd.ExecuteNonQuery
conn.Close
the problem is:
I'm checking the SQL statement in debug, copying the same query on my MySQL QueryBrowser and executing
the same string works in the querybrowser, but in ExecuteNonQuery() doesn't
what can be the problem?
notes:
1-connection is done, checked, and double checked, a few lines earlier, several SELECT statements are
executed and worked
2-connection string is not changed before this code, it was the same before
3-I'm not changing the code while copying to the Querybrowser, taking the text as it is directly from
debug window and pasting it to the SQL browser tool.
any ideas?
<div class="modified">modified on Tuesday, October 19, 2010 2:39 PM</div>
|
|
|
|
|
I don't know what you did, but all those SPANs seem to mess up the entire forum page. I would suggest you edit your existing post and refrain from using excessive HTML tags, the one you do want is the PRE tag for showing code.
|
|
|
|
|
The correct statement is:
INSERT INTO TABLE (FIELD1, FIELD2) VALUES ('value1','value2')
The data type must be the same type. For example:
if Field1 = string, Field2 = numeric then
INSERT INTO TABLE (FIELD1, FIELD2) VALUES ('value1',123)
sorry, for my language
I'm still learning
|
|
|
|
|
Thank you but,
The statement is forming correctly, I'm copying the text into query browser and executing
it's working there
|
|
|
|
|
So, show me how you create connection object and command object or take a look at this code:
'MS Access
'Execute = INSERT, UPDATE, DELETE
Public Function ExecuteDbData(ByVal oConn As System.Data.OleDb.OleDbConnection, ByVal sSQL As String) As Long
Dim oComm As System.Data.OleDb.OleDbCommand, oTrans As System.Data.OleDb.OleDbTransaction = Nothing
Dim iRetVal As Integer
Try
oConn.Open()
oTrans = oConn.BeginTransaction()
oComm = New System.Data.OleDb.OleDbCommand(sSQL, oConn, oTrans)
iRetVal = oComm.ExecuteNonQuery()
oTrans.Commit()
Catch ex As System.Data.OleDb.OleDbException
MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error")
Try
oTrans.Rollback()
oTrans.Dispose()
Catch
'do nothing
End Try
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error")
Finally
oConn.Close()
oTrans = Nothing
oComm = Nothing
End Try
Return iRetVal
End Function
'MS SQL
'Execute = INSERT, UPDATE, DELETE
Public Function ExecuteDbData(ByVal oConn As System.Data.SqlClient.SqlConnection, ByVal sSQL As String) As Long
Dim oComm As System.Data.SqlClient.SqlCommand, oTrans As System.Data.SqlClient.SqlTransaction = Nothing
Dim iRetVal As Integer
Try
oConn.Open()
oTrans = oConn.BeginTransaction(System.Data.IsolationLevel.Serializable)
oComm = New System.Data.SqlClient.SqlCommand(sSQL, oConn, oTrans)
iRetVal = oComm.ExecuteNonQuery()
oTrans.Commit()
Catch ex As System.Data.SqlClient.SqlException
MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error")
Try
oTrans.Rollback()
oTrans.Dispose()
Catch
'do nothing
End Try
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error")
Finally
oConn.Close()
oTrans = Nothing
oComm = Nothing
End Try
Return iRetVal
End Function
sorry, for my language
I'm still learning
|
|
|
|
|
Sorry everyone
I figured out that I was working on another dataBase with my querybrowser
I just duplicated the databases and that fooled me in the first place
I wasn't aware of the difference until 3 hours of crisis
sorry for disturbance
thanks for any help
|
|
|
|
|
A few thoughts. First of all, you are leaving yourself wide open to a SQL Injection Attack with this code - use SQL Parameters instead of directly injecting values. Secondly, is it throwing an exception? Set a breakpoint on the code and step through it - see what's happening at this point.
|
|
|
|
|
Hi,
I am using IECore as the renderer. I am able to capture the snapshot of the web content and save it as bmp file (shown below).
To get the content
AxWebBrowser web = new AxWebBrowser();
web.SetBounds(0, 0, 1024, 600);
web.Navigate2(ref URL, ref oNull, ref oNull, ref oNull, ref oNull);
Application.Run();
private Graphics grp;
private IntPtr hdc;
private IViewObject vw;
private IHTMLDocument2 doc;
public void Capture()
{
doc = (IHTMLDocument2)web .Document;
web.SetBounds(0, 0, width, height);
image = new Bitmap(width, height);
grp = Graphics.FromImage(image);
_RECTL bounds;
bounds.left = 0;
bounds.top = 0;
bounds.right = width;
bounds.bottom = height;
hdc = grp.GetHdc();
vw = doc2 as IViewObject;
vw.Draw(1, -1, (IntPtr)0, (IntPtr)0, (IntPtr)0,
(IntPtr)hdc, ref bounds, (IntPtr)0, (IntPtr)0, 0);
grp.ReleaseHdc(hdc);
image.Save(fileName);
image.Dispose();
}
}
I am calling Capture at x fps. What I have observed is, if the application is allowed to run for 30 mins - 1 hrs, the memory increases from 30MB to 600 MB and more and finally the application crashes
I tried forcefully disposing the bitmap and graphics object. But still the problem persists. I am not getting the root cause of the issue.
Any help is appreciated.
|
|
|
|
|
HalliHaida wrote: grp = Graphics.FromImage(image);
you create a graphics (which is an expensive object) and you don't dispose it. That is your problem.
Now why are you creating a new bitmap and a new graphics all the time. You could probably work with just one each, and reuse it over and over, reducing the load caused by your app.
BTW: why do you use axWebBrowser instead of WebBrowser class?
|
|
|
|
|
As well as what Luc has said, there is a potential that the pages you navigate to cause a leak in IE as well. Basically, IE uses reference counting to control when things get collected by the internal IE garbage collector. Certain things, such as unreleased event handlers and badly implemented closures, leave references in the reference counter, so these items never get removed (even if the page is refreshed).
|
|
|
|
|
Thanks a lot for the information.
|
|
|
|
|
|
If what you are saying is that say your KVP list contains:
K1, AAA
K2, BBB
K3, BBB
K4, CCC Then your strings list should only contain 3 elements: "AAA", "BBB", and "CCC", then you need to:
1) Change your array of strings to a List<string> as you don't know how many elements it will contain - you can convert it to an array later if you need to with the ToArray method.
2) Set a string lastValue and set it to the first value, plus the string "Do not match" - this ensures that the first KVP value is transferred to the new list.
3) In your loop, compare the current KVP value to lastValue and if different, use the Add method to add it to your List of strings.
4) At the bottom of your loop, set lastValue to the KVP Value.
Real men don't use instructions. They are only the manufacturers opinion on how to put the thing together.
|
|
|
|
|
I think this pattern is what you are looking for:
using System;
using System.Collections.Generic;
namespace KeyValuePair
{
class Program
{
static void Main(string[] args)
{
List<KeyValuePair<string, string>> listImport = new List<KeyValuePair<string, string>>();
listImport.Add(new KeyValuePair<string, string>("K1", "CCC"));
listImport.Add(new KeyValuePair<string, string>("K2", "BBB"));
listImport.Add(new KeyValuePair<string, string>("K3", "AAA"));
listImport.Add(new KeyValuePair<string, string>("K4", "BBB"));
listImport.Sort(delegate(KeyValuePair<string, string> first, KeyValuePair<string, string> second)
{
return first.Value.CompareTo(second.Value);
});
string strLast = String.Empty;
List<string> listDistinct = new List<string>();
foreach (KeyValuePair<string, string> kvp in listImport)
{
if (strLast == kvp.Value)
continue;
listDistinct.Add(kvp.Value);
strLast = kvp.Value;
}
foreach (string str in listDistinct)
Console.WriteLine(str);
Console.ReadKey();
}
}
}
|
|
|
|
|
Hi ,
I am submitting a html form in ASP.NET 1.1, to a websphere server. I am browsing excel file and submitting through object to Websphere server, by sybmitting form with action as Websphere hosted address.
Whenever I login to app, and try to upload the file with above functionality, for the first time, I get redirected to Login.aspx automatically. But when I re-login again and does the same thing as above, the file is uploaded successfully.
Can you please help me regarding this, as I have maintained releative values of timeout for session and form-authentication in web.config file.
- Ajay K
modified on Tuesday, October 19, 2010 3:43 AM
|
|
|
|
|
Please try the ASP.NET forum - this is C#
Real men don't use instructions. They are only the manufacturers opinion on how to put the thing together.
|
|
|
|
|
hi, I heard that there is a method of using class to get the value from form 1 to form 2 but i not familiar with using class.So is there any advice or reference that you could provide me?
|
|
|
|
|